分享自己很喜歡的一句話:不積跬步,無(wú)以至千里;不積小流,無(wú)以成江海。
Activity生命周期是一個(gè)很基礎(chǔ)很基礎(chǔ)的知識(shí) ,只要你Android入門,應(yīng)該都知道Activity的7大生命周期吧。
https://developer.android.com/guide/components/activities/activity-lifecycle
悄咪咪的用下官網(wǎng)上Activity生命周期的圖來(lái)簡(jiǎn)化說(shuō)明下:


1、onCreate :進(jìn)入一個(gè)Activity首先會(huì)調(diào)用onCreate生命周期來(lái)創(chuàng)建活動(dòng)。
2、onStart: 當(dāng)活動(dòng)處于可見(jiàn)的狀態(tài)時(shí)候會(huì)調(diào)用onStart生命周期來(lái)啟動(dòng)活動(dòng)。
3、onResume:當(dāng)Activity獲取用戶焦點(diǎn)的時(shí)候執(zhí)行。
4、onPause:當(dāng)界面遮擋或暫停是后調(diào)onPause。
5、onStop:當(dāng)Activity不可見(jiàn)的時(shí)候調(diào)用onStop生命周期來(lái)停止。
6、onRestart:當(dāng)Activity沒(méi)有被銷毀的時(shí)候重新調(diào)用這個(gè)Activity的時(shí)候回調(diào)用onRestart方法。
7、onDestory:當(dāng)活動(dòng)被銷毀的時(shí)候會(huì)調(diào)用onDestory方法。
以上是對(duì)Activity生命周期理論上的理解,下面我們來(lái)用代碼測(cè)試一下。
首先我們創(chuàng)建兩個(gè)Activity 為MainActivity、SecondActivity ,在兩個(gè)Activity中分別加入七大生命周期的回調(diào)函數(shù)
Log輸出 或者斷點(diǎn)來(lái)查看一下程序執(zhí)行的順序。(因?yàn)榇a過(guò)于簡(jiǎn)單就直接貼圖啦)


1.MainActivity跳轉(zhuǎn)SecondActivity生命周期:
MainActivity-onPause()->SecondActivity-onCreate()->SecondActivity-onStart()-> SecondActivity-onResume()->MainActivity-onStop()
注意:
從上面的生明周期流程我們可以知道兩個(gè)界面跳轉(zhuǎn)的時(shí)候不要在源頭界面的onPause()方法里面做一些耗時(shí)操作。
2.關(guān)閉SecondActivity生命周期:
SecondActivity-onPause()->MainActivity-onRestart()->MainActivity-onStart()->MainActivity-onResume()->SecondActivity-onstop()->SecondActivity-onDestroy()
3.按下home鍵生命周期:
onPause->onStop
4.重新返回界面生命周期:
onRestart->onStart->onResume
5.橫豎屏切換時(shí)生命周期:
onPause()、onStop()、onDestroy()、onCreate()、onStart()、onResume()
6.分屏?xí)r的生命周期:
點(diǎn)擊手機(jī)的【任務(wù)鍵】,若屏幕中顯示有分屏按鈕(支持分屏),此時(shí)的生命周期為:onPause -> onStop;
點(diǎn)擊分屏按鈕 程序默認(rèn)占據(jù)整個(gè)手機(jī)屏幕的一半:onDestroy -> onCreate -> onStart -> onResume
調(diào)整分割線向上不影響任何生命周期 向下調(diào)整會(huì)影響生命周期:onPause -> onStop -> onDestroy -> onCreate -> onStart -> onResume;
銷毀 Activity 時(shí)生命周期是 onPause -> onStop -> onDestroy
分屏情況下在沒(méi)有獲取焦點(diǎn)時(shí)點(diǎn)擊物理返回鍵會(huì)將應(yīng)用滑到頂部 ,生命周期不執(zhí)行;獲取焦點(diǎn)的時(shí)候會(huì)先執(zhí)行onResume 點(diǎn)擊返回鍵時(shí)執(zhí)行onPause再關(guān)閉界面 并失去焦點(diǎn)
分屏情況下在沒(méi)有獲取焦點(diǎn)時(shí)點(diǎn)擊手機(jī)的 home 鍵時(shí)只是會(huì)將應(yīng)用滑到頂部 生命周期不執(zhí)行;獲取焦點(diǎn)時(shí)會(huì)先執(zhí)行onResume 點(diǎn)擊Home鍵時(shí)執(zhí)行onPause 再將應(yīng)用滑到頂部 并失去焦點(diǎn)。

最后拋出幾個(gè)問(wèn)題 :
· 假設(shè)項(xiàng)目中有這樣的需求,當(dāng)指定的 Activity 在用戶可見(jiàn)后才進(jìn)行廣播的注冊(cè),在用戶不可見(jiàn)后對(duì)廣播進(jìn)行注銷,那應(yīng)該在哪兩個(gè)回調(diào)中做這個(gè)處理呢?
· 如果有一些數(shù)據(jù)在 Activity 跳轉(zhuǎn)時(shí)(或者離開(kāi)時(shí))要保存到數(shù)據(jù)庫(kù),那么你認(rèn)為是在 onPause() 好還是在 onStop() 執(zhí)行這個(gè)操作好呢?
· Activity A 啟動(dòng)了 Activity B,簡(jiǎn)單說(shuō)下它們分別的生命周期的變化。
Activity A 通過(guò) Intent 顯示啟動(dòng)了 Activity B,當(dāng) B 處于可見(jiàn)狀態(tài)后,A 是否一定會(huì)調(diào)用 onStop()?