一.Activity的生命周期
首先我們來看一下官方文檔中給出的圖示:
通過上述圖示壮韭,我們可以總結(jié)Activity的生命周期規(guī)律如下:
1.啟動Activity:系統(tǒng)會先調(diào)用onCreate方法构资,然后調(diào)用onStart方法乌妒,最后調(diào)用onResume粤蝎,Activity進(jìn)入運行狀態(tài)碰缔。
2.當(dāng)前Activity被其他Activity覆蓋其上或被鎖屏:系統(tǒng)會調(diào)用onPause方法赋除,暫停當(dāng)前Activity的執(zhí)行阱缓。
3.當(dāng)前Activity由被覆蓋狀態(tài)回到前臺或解鎖屏:系統(tǒng)會調(diào)用onResume方法,再次進(jìn)入運行狀態(tài)举农。
4.當(dāng)前Activity轉(zhuǎn)到新的Activity界面或按Home鍵回到主屏荆针,自身退居后臺:系統(tǒng)會先調(diào)用onPause方法,然后調(diào)用onStop方法颁糟,進(jìn)入停滯狀態(tài)航背。
5.用戶后退回到此Activity:系統(tǒng)會先調(diào)用onRestart方法,然后調(diào)用onStart方法棱貌,最后調(diào)用onResume方法玖媚,再次進(jìn)入運行狀態(tài)。
6.當(dāng)前Activity處于被覆蓋狀態(tài)或者后臺不可見狀態(tài)婚脱,即第2步和第4步最盅,系統(tǒng)內(nèi)存不足突雪,殺死當(dāng)前Activity,而后用戶退回當(dāng)前Activity:再次調(diào)用onCreate方法涡贱、onStart方法咏删、onResume方法,進(jìn)入運行狀態(tài)问词。
7.用戶退出當(dāng)前Activity:系統(tǒng)先調(diào)用onPause方法督函,然后調(diào)用onStop方法,最后調(diào)用onDestory方法激挪,結(jié)束當(dāng)前Activity辰狡。
注意onPause與onStop的不同,onPause表示該Activity處于可見狀態(tài)但無法獲取用戶焦點垄分,如在當(dāng)前Activity上彈出一個對話框宛篇,則用戶焦點被對話框獲取,但當(dāng)前Activity仍然可以看到薄湿,而onStop表示該Activity處于不可見狀態(tài)叫倍,如從一個Activity跳轉(zhuǎn)到另一個Activity,則之前的Activity處于不可見狀態(tài)豺瘤。
二Fragment的生命周期
還是先上官方文檔圖:
從上述圖示可以看到Fragment與Activity的生命周期極其相似吆倦,我們先看一下只存在于Fragment中的幾個方法:
onAttach方法:顧名思義,是Fragment和Activity建立關(guān)聯(lián)的時候調(diào)用坐求。
onCreateView方法:為Fragment加載布局時調(diào)用蚕泽。
onActivityCreated方法:當(dāng)Activity中的onCreate方法執(zhí)行完后調(diào)用。
onDestroyView方法:Fragment中的布局被移除時調(diào)用桥嗤。
onDetach方法:顧名思義须妻,是Fragment和Activity解除關(guān)聯(lián)的時候調(diào)用。
重點注意一下onActivityCreated()泛领,因為該方法是在Activity中的onCreate方法執(zhí)行完成后調(diào)用璧南,所以在onActivityCreated()調(diào)用之前 Activity的onCreate可能還沒執(zhí)行,所以不能在onCreateView()中進(jìn)行 與Activity相關(guān)的UI操作师逸,而應(yīng)該在onActivityCreated()中進(jìn)行與Activity相關(guān)的UI操作司倚,而onCreateView中只進(jìn)行UI的顯示操作。
另外需要注意Fragment中不存在onRestart()方法篓像,該方法只存在與Activity中动知。