1、Activity生命周期
a智亮、當(dāng)用戶打開新的Activity或切換到桌面的時(shí)候铅乡,回調(diào)為onpause()->onStop()。如果新Activity采用透明主題鹃唯,則onStop()不調(diào)用
b爱榕、onStart和onStop是從是否可見的角度來回調(diào)的,onResume和onPauset是從是否位于前臺的角度來回調(diào)的
c坡慌、不能再onPause中做重量級的操作黔酥,因?yàn)楸仨歰nPause執(zhí)行完成之后,新的Activity的onResume方法才會(huì)被調(diào)用洪橘,影響體驗(yàn)
d跪者、異常情況下activity被銷毀,其的生命周期會(huì)按順序執(zhí)行熄求,但會(huì)在onDestory前新增onSaveInstanceState和在onCreate后新增onRestoreInstanceState方法渣玲,通過Bundle保存和恢復(fù)數(shù)據(jù),該兩個(gè)方法承兌出現(xiàn)抡四,只有在異常終止Activity時(shí)調(diào)用柜蜈,正常情況不調(diào)用,異常情況包括:資源相關(guān)系統(tǒng)配置改變(橫豎屏切換指巡、系統(tǒng)語言切換等)淑履、系統(tǒng)資源緊張殺死Activity等。
e藻雪、資源相關(guān)系統(tǒng)配置改變不重啟Activity生命周期的方法:添加configChanges屬性值android:configChanges= "orientation|locale"
2秘噪、Activity啟動(dòng)模式
1)standard:標(biāo)準(zhǔn)模式,也是系統(tǒng)默認(rèn)模式勉耀。每次啟動(dòng)一個(gè)Activity都會(huì)重新創(chuàng)建一個(gè)實(shí)例指煎,不管其是否存在蹋偏。誰啟動(dòng)這個(gè)Activity,這個(gè)Activity就運(yùn)行在啟動(dòng)它的那個(gè)組件所在的棧中至壤。當(dāng)我們用ApplicationContext去啟動(dòng)standard模式的Activity時(shí)威始,系統(tǒng)會(huì)報(bào)錯(cuò),因?yàn)榉茿ctivity的Context沒有任務(wù)棧像街。
2)singleTop:棧頂復(fù)用模式黎棠,如果新的Activity已經(jīng)在棧頂,不會(huì)重新創(chuàng)建镰绎,onNewIntent方法會(huì)被調(diào)用脓斩。假設(shè)目前棧內(nèi)從低到頂依次為ABCD,這時(shí)候如果要啟動(dòng)D畴栖,如果D為singleTop模式随静,則D的onNewIntent方法被調(diào)用,棧內(nèi)情況依然為ABCD吗讶,如果D的啟動(dòng)方式的standard則棧內(nèi)情況為ABCDD燎猛。
3)singleTask:棧內(nèi)復(fù)用模式,只要Activity在一個(gè)棧中存在关翎,那么多次啟動(dòng)該Activity都不會(huì)重新創(chuàng)建實(shí)例扛门,只會(huì)調(diào)用器其onNewIntent方法。
4)singleInstance:單例模式纵寝,該啟動(dòng)模式下论寨,系統(tǒng)會(huì)會(huì)為它單獨(dú)創(chuàng)建一個(gè)新的任務(wù)棧,該Activity單獨(dú)運(yùn)行在新的任務(wù)棧中爽茴,后續(xù)請求均不會(huì)再創(chuàng)建新的實(shí)例葬凳,除非該棧被系統(tǒng)銷毀。
a室奏、默認(rèn)情況下Activity的任務(wù)棧為其包名火焰,也可以通過TaskAffinity單獨(dú)為Activity制定任務(wù)棧,屬性值必須包含“.”且不能和包名相同胧沫。一般和singleTask配合使用
b昌简、假設(shè)有ABC三個(gè)Activity,A為默認(rèn)啟動(dòng)方式绒怨,BC為singleTask啟動(dòng)模式且指定其他任務(wù)棧纯赎,現(xiàn)從A啟動(dòng)B,在B再啟動(dòng)C南蹂,從C啟動(dòng)A犬金,再從A啟動(dòng)B,現(xiàn)在點(diǎn)擊兩次返回,會(huì)回到哪個(gè)界面晚顷。answer:桌面峰伙。