Android的上下文環境Activity的this和getApplicationContext的區別

我叫阿狸貓發表於2014-02-27
AlertDialog.Builder builder = new Builder(this);
這裡就必須用this引數了,因為這個通知框需要掛載到指定的Activity上
而如果使用getApplicationContext作為實參的話,那麼程式就會報錯,因為它不曉得掛載到哪個Activity上


那什麼時候用this,什麼時候用getApplicationContext
如果牽涉到了程式碼(物件)的生命週期的時候,就使用getApplicationContext作為上下文引數

MySQLiteOpenHelper helper = new MySQLiteOpenHelper(this);
Databse db  = helper.getReadableDatabase();

如果實參傳入的是this,如果當前Activity介面被關閉了,那麼Activity就會執行onDestory()方法進行銷燬,而此時this所代表的物件就會被銷燬了,一旦this代表的物件被銷燬了。

new MySQLiteOpenHelper(this);利用這句程式碼開啟的資料庫連結也會隨之關閉。所以,當Activity關閉後再想運算元據庫就會操作失敗了。



所以牽涉到生命週期需要用到上下文物件的時候就要用getApplicationContext作為實參,getApplicationContext當應用程式程式一建立(程式一開啟),此應用程式的上下文就存在了
直到此應用程式的程式被銷燬,它的上下文才會銷燬

相關文章