android中activity.this跟getApplicationContext的區別

來源:互聯網
上載者:User

標籤:cas   關閉   活躍   添加   android中   oid   www   區別   cti   

轉載: http://www.myexception.cn/android/1968332.html

android中activity.this和getApplicationContext的區別

在android中常常會遇到與context有關的內容

淺論一下context : 在語句 AlertDialog.Builder builder = new AlertDialog.Builder(this); 中,要求傳遞的 參數就是一個context,在這裡我們傳入的是this,那麼這個this究竟指的是什麼東東呢? 這裡的this指的是Activity.this,是這個語句所在的Activity的this,是這個Activity 的上下文。網上有很多朋友在這裡傳入this.getApplicationContext(),這是不對的。 AlertDialog對象是依賴於一個View的,而View是和一個Activity對應的。 於是,這裡涉及到一個生命週期的問題,this.getApplicationContext()取的是這個應 用程式的Context,Activity.this取的是這個Activity的Context,這兩者的生命週期是不同 的,前者的生命週期是整個應用,後者的生命週期只是它所在的Activity。而AlertDialog應 該是屬於一個Activity的,在Activity銷毀的時候它也就銷毀了,不會再存在;但是,如果傳 入this.getApplicationContext(),就表示它的生命週期是整個應用程式,這顯然超過了它 的生命週期了,而且不能判定這個dialog屬於哪一個activity(AlertDialog屬於Activity的一部分),所以程式會報錯,"anndroid.view.WindowManager$BadTokenException:unable to add window - -token null is not for an application"提示不能添加視窗。 所以,在這裡我們只能使用Activity的this。

 

下面介紹一下兩者的區別

(1)對於getApplicationContext,我們可以假定它是一個父類,它屬於整個應用程式共有,Activity.this可以假定為其的一個子類,該子類包含了一些特定的引用。所以,一般可以用getApplicationContext的地方都可以用特定的Activity.this代替。

(2)在生命週期上,通過getApplicationContext得到的內容物件們只要當前的應用程式還存在,那麼該對象就會一直存在,對於Activity.this上下文來說,只要當前的activity執行了onDestory方法,這個內容物件就會一起被系統收回。

(3)在應用情境上,如果我們通過一個內容物件來執行某個動作,且希望一直處於活躍狀態,那麼應該用getApplicationContext來擷取上下文,如資料庫的操作。此時,如果採用Activity.this,那麼當前Activity調用onDestory方法時,資料庫就會關閉,應用程式會產生錯誤。

 

 

getApplicationContext() 返回應用的上下文,生命週期是整個應用,應用摧毀它才摧毀
Activity.this的context 返回當前activity的上下文,屬於activity ,activity 摧毀他就摧毀

getBaseContext()  返回由建構函式指定或setBaseContext()設定的上下文

 

總結:

1.dialog
dialog依附於activity存在,所以直接用XXXActivity.this就好,當activity消失的時候dialog也就銷毀了
2.activity
上面我們已經說過了,直接使用XXXActivity.this,返回的是當前的activity執行個體,當前activity銷毀時,一起銷毀
3.service,broadcastReceiver
兩者都可以
總結:和UI操作相關的不建議使用getApplicationContext(),一般都使用和activity相關的context,其餘的操作,看具體情況,根據存在的生命週期的長度作出選擇

android中activity.this跟getApplicationContext的區別

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.