在android中常常會遇到與context有關(guān)的內(nèi)容:
比如AlertDialog彈窗:在語句
AlertDialog.Builder builder = new AlertDialog.Builder(this);
中,要求傳遞的 參數(shù)就是一個context,在這里我們傳入的是this啤月,那么這個this究竟指的是什么東東呢茅主? 這里的this指的是Activity.this,是這個語句所在的Activity的this茵休,是這個Activity 的上下文。網(wǎng)上有很多朋友在這里傳入this.getApplicationContext(),這是不對的累奈。
AlertDialog對象是依賴于一個View的,而View是和一個Activity對應(yīng)的急但。 于是澎媒,這里涉及到一個生命周期的問題,this.getApplicationContext()取的是這個應(yīng) 用程序的Context波桩,Activity.this取的是這個Activity的Context戒努,這兩者的生命周期是不同 的,前者的生命周期是整個應(yīng)用镐躲,后者的生命周期只是它所在的Activity储玫。
而AlertDialog應(yīng) 該是屬于一個Activity的,在Activity銷毀的時候它也就銷毀了萤皂,不會再存在撒穷;但是,如果傳
入this.getApplicationContext()敌蚜,就表示它的生命周期是整個應(yīng)用程序桥滨,這顯然超過了它 的生命周期了窝爪。 所以,在這里我們只能使用Activity的this齐媒。
new AlertDialog.Builder(getApplicationContext())時發(fā)生錯誤:
E/AndroidRuntime(5844): android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application
于是查了查:
getApplicationContext() 生命周期是整個應(yīng)用蒲每,應(yīng)用摧毀它才摧毀 Activity.this的context屬于activity ,activity 摧毀他就摧毀
activity.this要返回一個activity喻括,而getApplicationContext()就不一定返回一個activity
總結(jié)
getApplicationContext()
返回應(yīng)用的上下文邀杏,生命周期是整個應(yīng)用,應(yīng)用摧毀它才摧毀唬血。
Activity.this
返回當前activity的上下文望蜡,生命周期只是它所在的Activity,activity 摧毀他就摧毀