getApplication和Activity.this的區別
首先需要注意以下這段程式碼:(彈出視窗的時候是不會執行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(常用)
相關文章
- Android之getApplication()、getApplicationContext的區別AndroidAPPContext
- ../和./和/的區別
- 和 的區別
- as 和 with的區別
- ||和??的區別
- /*和/**的區別
- LinkedList和ArrayList的區別、Vector和ArrayList的區別
- http和https的區別/get和post的區別HTTP
- ./ 和sh 的區別
- JQuery this和$(this)的區別jQuery
- jquery $(this) 和this的區別jQuery
- T和?的區別
- ++a和a++的區別
- makefile =和:=的區別
- Mybatis中#{}和${}傳參的區別及#和$的區別小結MyBatis
- 和區別
- MYSQL和SQL的區別MySql
- varchar和char的區別
- &self 和 self 的區別
- var和public的區別
- filter和interceptor的區別Filter
- useEffect 和 useLayoutEffect 的區別
- SDK和API的區別?API
- var 和 let 的區別
- WebApi和MVC的區別WebAPIMVC
- service和systemctl的區別
- GET和POST的區別?
- GET和POST的區別
- button和submit的區別MIT
- GET 和 POST 的區別
- 【Java】equals 和 == 的區別Java
- django和flask的區別DjangoFlask
- promise 和 Observable 的區別Promise
- sass和less的區別
- POST 和 GET 的區別
- cookie和session的區別CookieSession
- MTV和MVC的區別MVC
- mysql中!=和is not的區別MySql