一秽晚、Activity 的生命周期
1.典型情況下 Activity 的生命周期
在正常情況下斥废,Activity 會(huì)經(jīng)歷以下生命周期:
onCreate:表示 Activity 正在被創(chuàng)建,可以在這個(gè)方法做一些初始化的工作蚜退,如
setContentView
去加載布局資源闰靴、初始化一些參數(shù)。onRestart:表示 Activity 正在重新啟動(dòng)钻注。一般情況下當(dāng) Activity 從不可見變?yōu)榭梢姇r(shí)蚂且, onRestart 就會(huì)被調(diào)用。這種情況一般是用戶按下了 Home 鍵切換到桌面或者用戶打開了一個(gè)新的 Activity 幅恋,這時(shí)當(dāng)前的 Activity 就會(huì)暫停杏死,執(zhí)行 onPause、onStop捆交。緊接著用戶又回到了這個(gè) Activity淑翼,這就會(huì)調(diào)用這個(gè) Activity 的 onRestart。
onStart:表示 Activity 正在被啟動(dòng)品追,這時(shí) Activity 已經(jīng)可見了玄括,但是還沒有出現(xiàn)在前臺(tái),還無法和用戶交互肉瓦≡饩可以理解成這時(shí) Activity 已經(jīng)顯示出來了,但是用戶看不到泞莉。
onResume:這時(shí) Activity 已經(jīng)可見哪雕,并出現(xiàn)在前臺(tái)可以和用戶交互。注意:onStart 和 onResume 都表示Activity 已經(jīng)可見鲫趁,但是 onStart 時(shí) Activity 還在后臺(tái)斯嚎,onResume 時(shí) Activity 才顯示在前臺(tái)。
onPause:表示 Activity 正在停止饮寞,緊接著調(diào)用 onStop 孝扛。此時(shí)可以做一些輕量級(jí)的存儲(chǔ)數(shù)據(jù)列吼、停止動(dòng)畫等工作幽崩,但注意不能太耗時(shí),因?yàn)楸仨氁?onPause 執(zhí)行完才能執(zhí)行新的 Activity 的 onCreate寞钥、onStart慌申、onResume 。所以重量級(jí)的操作盡量在 onStop 中操作。
onStop:表示 Activity 正在停止蹄溉,可以做一些稍微重量級(jí)的回收工作咨油,但是同樣不能太耗時(shí)。
onDestroy:表示 Activity 即將被銷毀柒爵,可以做一些回收工作和最終資源的釋放役电,比如移除廣播、反注冊(cè) EventBus棉胀。
下面是 Activity 的生命周期切換過程:
2.異常情況下 Activity 的生命周期
-
2.1 資源相關(guān)的系統(tǒng)配置發(fā)生改變導(dǎo)致 Activity 被殺死并重新創(chuàng)建
當(dāng)系統(tǒng)配置發(fā)生改變法瑟,Activity 會(huì)被銷毀,其 onPause唁奢、onStop霎挟、onDestroy 方法會(huì)被調(diào)用,同時(shí)由于其是異常情況終止的麻掸,系統(tǒng)會(huì)調(diào)用 onSaveInstanceState 方法來保存當(dāng)前的狀態(tài)酥夭。這個(gè)方法是調(diào)用在 onStop 之前,但是和調(diào)用 onPause 沒有確定的先后關(guān)系脊奋。onSaveInstanceState 方法只有在異常終止才會(huì)被調(diào)用熬北,正常情況不會(huì)調(diào)用這個(gè)方法。
當(dāng) Activity 被重新創(chuàng)建后狂魔,系統(tǒng)會(huì)調(diào)用 onRestoreInstanceState 蒜埋,并且把 Activity 銷毀時(shí) onSaveInstanceState 方法保存的 Bundle 對(duì)象作為參數(shù)傳給 onRestoreInstanceState 和 onCreate 方法。所以我們能通過 onRestoreInstanceState 和 onCreate 方法判斷Activity 是否被重建了最楷。如果重建了整份,就取出之前保存的數(shù)據(jù)恢復(fù)視圖狀態(tài),onRestoreInstanceState 的調(diào)用時(shí)機(jī)在 onStart 之后籽孙。
-
2.2 資源內(nèi)存不足導(dǎo)致低優(yōu)先級(jí)的 Activity 被殺死
當(dāng)系統(tǒng)內(nèi)存不足時(shí)烈评,系統(tǒng)會(huì)按照優(yōu)先級(jí)高低優(yōu)先殺死優(yōu)先級(jí)低的 Activity 所在的進(jìn)程,并后續(xù)通過 onSaveInstanceState 和 onRestoreInstanceState 來存儲(chǔ)和恢復(fù)數(shù)據(jù)犯建。