Android 開發(fā)藝術(shù)探索筆記(一)之 Activity 的生命周期

一、Activity 的生命周期

1.典型情況下 Activity 的生命周期

在正常情況下,Activity 會經(jīng)歷以下生命周期:

  • onCreate:表示 Activity 正在被創(chuàng)建,可以在這個方法做一些初始化的工作,如 setContentView 去加載布局資源、初始化一些參數(shù)。

  • onRestart:表示 Activity 正在重新啟動。一般情況下當 Activity 從不可見變?yōu)榭梢姇r, onRestart 就會被調(diào)用。這種情況一般是用戶按下了 Home 鍵切換到桌面或者用戶打開了一個新的 Activity ,這時當前的 Activity 就會暫停,執(zhí)行 onPause、onStop。緊接著用戶又回到了這個 Activity,這就會調(diào)用這個 Activity 的 onRestart。

  • onStart:表示 Activity 正在被啟動,這時 Activity 已經(jīng)可見了,但是還沒有出現(xiàn)在前臺,還無法和用戶交互??梢岳斫獬蛇@時 Activity 已經(jīng)顯示出來了,但是用戶看不到。

  • onResume:這時 Activity 已經(jīng)可見,并出現(xiàn)在前臺可以和用戶交互。注意:onStart 和 onResume 都表示Activity 已經(jīng)可見,但是 onStart 時 Activity 還在后臺,onResume 時 Activity 才顯示在前臺。

  • onPause:表示 Activity 正在停止,緊接著調(diào)用 onStop 。此時可以做一些輕量級的存儲數(shù)據(jù)、停止動畫等工作,但注意不能太耗時,因為必須要 onPause 執(zhí)行完才能執(zhí)行新的 Activity 的 onCreate、onStart、onResume 。所以重量級的操作盡量在 onStop 中操作。

  • onStop:表示 Activity 正在停止,可以做一些稍微重量級的回收工作,但是同樣不能太耗時。

  • onDestroy:表示 Activity 即將被銷毀,可以做一些回收工作和最終資源的釋放,比如移除廣播、反注冊 EventBus。

下面是 Activity 的生命周期切換過程:

Activity 生命周期切換過程

2.異常情況下 Activity 的生命周期

  • 2.1 資源相關(guān)的系統(tǒng)配置發(fā)生改變導致 Activity 被殺死并重新創(chuàng)建

    當系統(tǒng)配置發(fā)生改變,Activity 會被銷毀,其 onPause、onStop、onDestroy 方法會被調(diào)用,同時由于其是異常情況終止的,系統(tǒng)會調(diào)用 onSaveInstanceState 方法來保存當前的狀態(tài)。這個方法是調(diào)用在 onStop 之前,但是和調(diào)用 onPause 沒有確定的先后關(guān)系。onSaveInstanceState 方法只有在異常終止才會被調(diào)用,正常情況不會調(diào)用這個方法。

    當 Activity 被重新創(chuàng)建后,系統(tǒng)會調(diào)用 onRestoreInstanceState ,并且把 Activity 銷毀時 onSaveInstanceState 方法保存的 Bundle 對象作為參數(shù)傳給 onRestoreInstanceState 和 onCreate 方法。所以我們能通過 onRestoreInstanceState 和 onCreate 方法判斷Activity 是否被重建了。如果重建了,就取出之前保存的數(shù)據(jù)恢復視圖狀態(tài),onRestoreInstanceState 的調(diào)用時機在 onStart 之后。

  • 2.2 資源內(nèi)存不足導致低優(yōu)先級的 Activity 被殺死

    當系統(tǒng)內(nèi)存不足時,系統(tǒng)會按照優(yōu)先級高低優(yōu)先殺死優(yōu)先級低的 Activity 所在的進程,并后續(xù)通過 onSaveInstanceState 和 onRestoreInstanceState 來存儲和恢復數(shù)據(jù)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容