Android Activity 生命周期和重要的相关函数(基础一)
總結(jié): 1.oncreate 2.onstart ? ? ? ? ? ?可見但不交互 3.onrestart ? ? ? ? 從其他界面重新調(diào)轉(zhuǎn)過來 4.onresume ? ? ? 可交互 5.onpase 6.onstop ? ? ? ? ? ?不可見 7.ondestroy
BACK鍵:
當(dāng)我們按BACK鍵時(shí),我們這個(gè)應(yīng)用程序?qū)⒔Y(jié)束,這時(shí)候我們將先后調(diào)用onPause()->onStop()->onDestory()三個(gè)方法,如下圖所示:
HOME鍵:
當(dāng)我們打開應(yīng)用程序時(shí),比如瀏覽器,我正在瀏覽NBA新聞,看到一半時(shí),我突然想聽歌,這時(shí)候我們會(huì)選擇按HOME鍵,然后去打開音樂應(yīng)用程序,
而當(dāng)我們按HOME的時(shí)候,Activity先后執(zhí)行了onPause()->onStop()這兩個(gè)方法,這時(shí)候應(yīng)用程序并沒有銷毀。如下圖所示:
而當(dāng)我們再次啟動(dòng)ActivityDemo應(yīng)用程序時(shí),則先后分別執(zhí)行了onRestart()->onStart()->onResume()三個(gè)方法,如下圖所示:
1.OnstartActivityResult
2. onnewintent
3. onSaveInstanceState
4.onconfigChange
5.setTheme
onStart是可見,但并不可交互的,onResume才可交互的,這也是onStart(可見)和onResume(可見且可交互,在前臺(tái)了)的區(qū)別
場景:
在實(shí)際應(yīng)用場景中,假設(shè)A Activity位于棧頂,此時(shí)用戶操作,從A Activity跳轉(zhuǎn)到B Activity。那么對AB來說,具體會(huì)回調(diào)哪些生命周期中的方法呢?回調(diào)方法的具體回調(diào)順序又是怎么樣的呢?
開始時(shí),A被實(shí)例化,執(zhí)行的回調(diào)有A:onCreate -> A:onStart -> A:onResume。
當(dāng)用戶點(diǎn)擊A中按鈕來到B時(shí),假設(shè)B全部遮擋住了A,將依次執(zhí)行A:onPause -> B:onCreate -> B:onStart -> B:onResume -> A:onStop。
此時(shí)如果點(diǎn)擊Back鍵,將依次執(zhí)行B:onPause -> A:onRestart?-> A:onStart -> A:onResume -> B:onStop -> B:onDestroy。
至此,Activity棧中只有A。在Android中,有兩個(gè)按鍵在影響Activity生命周期這塊需要格外區(qū)分下,即Back鍵和Home鍵。我們先直接看下實(shí)驗(yàn)結(jié)果:
此時(shí)如果按下Back鍵,系統(tǒng)返回到桌面,并依次執(zhí)行A:onPause -> A:onStop -> A:onDestroy。
此時(shí)如果按下Home鍵(非長按),系統(tǒng)返回到桌面,并依次執(zhí)行A:onPause -> A:onStop。由此可見,Back鍵和Home鍵主要區(qū)別在于是否會(huì)執(zhí)行onDestroy。
? ? ?在之前的項(xiàng)目開發(fā)過程中,當(dāng)時(shí)遇到一個(gè)很奇怪的問題: 手機(jī)上的“開發(fā)者選項(xiàng)”中有一個(gè)“不保留活動(dòng)”的設(shè)置,當(dāng)開啟此設(shè)置,手機(jī)上的設(shè)置提示是“用戶離開后即銷毀每個(gè)活動(dòng)” ,開啟后,對于其他的應(yīng)用程序是從A Acticity到B Activity,然后Back鍵回到A,此時(shí),其他應(yīng)用程序只是先白屏(有可能黑屏等,取決于主題設(shè)置)一下,然后A開始可見,但是我的應(yīng)用程序中出現(xiàn)的一個(gè)結(jié)果卻是直接返回到了桌面。一開始百思不得其解。最后終于定位出問題。首先,我們需要明確開啟此設(shè)置項(xiàng)后對Activity生命周期的影響。 開啟此設(shè)置項(xiàng)后,當(dāng)A到B時(shí),假設(shè)B全部遮擋住了A,將依次執(zhí)行A:onPause -> B:onCreate -> B:onStart -> B:onResume -> A:onStop -> A:onDestroy。是的,A在系統(tǒng)原本的生命周期回調(diào)中增加了onDestroy。此即“用戶離開后即銷毀每個(gè)活動(dòng)”的含義。但此時(shí)需要注意的是,只要沒有認(rèn)為的調(diào)用A的finish()方法,雖然A執(zhí)行了onDestroy,但Activity棧中依然保留有A,此時(shí)B處于棧頂。那么在B中按Back鍵回到A時(shí),將依次執(zhí)行:B:onPause -> A:onCreate -> A:onStart -> A:onResume -> B:onStop -> B:onDestroy。沒錯(cuò),A從onCreate開始執(zhí)行了。此處也就解釋了為什么A可能會(huì)出現(xiàn)白屏(或黑屏等)一下的原因了。
這樣的結(jié)果:開啟“不保留活動(dòng)設(shè)置” ,back鍵或者不可見或者h(yuǎn)ome,都執(zhí)行Ondestroy方法,但是棧沒有被移除!
如果需要移除可以執(zhí)行:
AppManager.getAppManager().finishActivity(this); 1 /** 2 * 結(jié)束指定的Activity 3 */ 4 public void finishActivity(Activity activity) { 5 if (activity != null) { 6 activityStack.remove(activity); 7 activity.finish(); 8 activity = null; 9 } 10 }
總結(jié)
以上是生活随笔為你收集整理的Android Activity 生命周期和重要的相关函数(基础一)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LikeLib:区块链+云计算的结合技术
- 下一篇: android sina oauth2.