在Android工程中常常用到 Toast來顯示提示,在maketext的第一個參數是要求傳遞一個context
那麼問題來了
有時候是使用getApplicationContext();
有時候是Activity.this
而有時候又直接是 thisandroid
在android中經常會遇到與context有關的內容,大多都是做爲參數在傳遞,可是它的做用到底是什麼呢ui
先說它的用法,舉個例子this
在語句 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(),就表示它的生命週期是整個應用程序,這顯然超過了它的生命週期了。 因此,在這裏咱們只能使用Activity的this。spa
下面具體解釋它的內涵orm
其實Activity.this就是context的一個具體,Activity.this是你當前所在的activity的上下文,this.getApplicationContext()取得的是整個應用的上下文,在你把他們做爲參數傳遞的時候,多數是用來標註你要在哪一個activity裏面進行操做,好比上文提到的AlertDialog.Builder builder = new AlertDialog.Builder(this);你是要在當前的activity裏面建立對話框,若是傳遞的是this.getApplicationContext(),這是整個應用的上下文,代碼怎麼會知道你想在哪一個具體的activity裏面建立對話框呢,因此,在這裏應該傳入的是你想建立對話框的那個activity的上下文,即Activity.this.若是這你都理解了,那麼你也該明白,每一個activity都有本身的上下文,而整個應用只有一個上下文.對象
總結生命週期
getApplicationContext()
返回應用的上下文,生命週期是整個應用,應用摧毀它才摧毀。
Activity.this get
返回當前activity的上下文,生命週期只是它所在的Activity,activity 摧毀他就摧毀it