getApplication和Activity.this的區別

我叫阿狸貓發表於2014-03-31

首先需要注意以下這段程式碼:彈出視窗的時候是不會執行onPause方法的,因為彈出視窗屬於當前的Activity的一部分,這個視窗是掛載在這個Activity上的,而且要想彈出對話方塊就必須要設定掛載在哪個Activity上,而這裡使用getApplication()就不可以了,因為getApplication()是整個應用程式的上下文環境,彈出視窗不可能掛載在整個程式的上下文環境中。)

@Override
protected void onPause() {
	super.onPause();
	System.out.println("失去焦點");
	Toast.makeText(getApplicationContext(), "失去焦點", Toast.LENGTH_SHORT).show();
}
public void alertDialog(View view){
	new AlertDialog.Builder(this)
	.setTitle("彈出視窗")
	.setMessage("我是彈出視窗")
	.show();
}



凡是可以用getApplication()的地方都可以用Activity.this。


什麼時候使用getApplication()?

getApplication()存活的時間非常長。例如繫結服務,Activity在繫結服務的時候,必須在Activity銷燬的時候解綁服務,如果沒有在onDestory裡進行解綁服務,那麼就會出異常,說服務所繫結的上下文環境已經不存在了。

此時如果想讓服務存在的時間長一點,就可以用getApplication().bindService()進行服務的繫結,這樣在Activity退出的時候就不會報錯了。

總結:想讓它存在的時間長點就用getApplication()


什麼時候使用Activity.this?

Activity.this存活的時間非常短,只要進行後退操作,這個Activity就執行了onDestory方法銷燬了,也就結束了生命週期。

總結:想讓它存在的時間短點就用Activity.this(常用)