Android Activity生命週期簡述
本文簡單介紹Activity生命週期,內容主要來自於官方文件。
在簡述各個生命週期方法前,先總體做一下概述。我們可以從三個層面來監視Activity生命週期
完整生命週期:完整生命週期始於onCreate方法回撥,止於onDestroy方法回撥
可見週期:可見週期始於onStart方法回撥,止於onStop方法回撥
前臺週期:前臺週期始於onResume方法回撥,止於onPause方法回撥
下面簡單介紹一下各個生命週期方法:
onCreate生命週期的第一個方法,表示Activity正在建立(啟動)。特別說明:若您在該方法內呼叫finish方法,則會立即出發onDestroy回撥,其他生命週期不會執行
onRestart該方法觸發的前提:onStop方法被呼叫。onStop方法被呼叫而導致的Activity不可見到Activity再次可見時被呼叫。該方法回撥之後系統會相繼觸發onStart和onResume方法。
onStartActivity可見時呼叫(此時Activity尚未處於前臺):在onCreate方法之後或由onStop方法被呼叫而導致的Activity不可見到Activity再次可見時被呼叫
onResume該方法的回撥標識Activity處於前臺。官方文件指明,這裡比較適合動畫啟動及排他性裝置訪問(如相機)等
onPauseActivity即將進入後臺時回撥此方法。需要特別注意的是,若Activity A啟動Activity B,則Activity A的onPause方法回撥完成後,Activity B才會建立,因此不要在該回調方法中做耗時操作。
onStopActivity由可見到不可見時回撥此方法
onDestroy生命週期的最後一個方法,表示Activity即將被銷燬。官方文件指明,在某些情況下,系統會簡單粗暴的殺掉Activity的宿主程序( 如下文示意圖中的標註1 ),因此我們不應該依賴此方法做資料儲存工作,可在此方法中做資源釋放操作
下圖為官方文件給出的示意圖

Activity生命週期示意圖
此圖很清晰嚴謹,但是官方文件對各個生命週期回撥方法的描述並不是很詳細,因此如果不認真研讀文件,很難明白圖中的生命週期方法的走向,並可能對某些方法產生誤解。例如對於onStop方法,可能會有部分童鞋對其有誤解,誤認為Activity進入後臺時回撥該方法,其實進入後臺時回撥的是onPause方法,不可見時回撥onStop方法;也有童鞋誤以為onResume方法回撥意味著可以進行互動,其實我們應該以public void onWindowFocusChanged (boolean hasFocus)回撥中的hasFocus引數為依據來判定是否可以進行互動。
Activity可見與否與其是否處於前臺是兩回事,onStart 與 onStop 配對描述Activity是否可見;onPause 與
onResume 配對描述Activity是否處於前臺。Activity可見並不意味著可以互動,同樣的其處於前臺也未必可以互動。直接的例子是,若Activity展示了Dialog,此時Activity仍處於前臺,但我們卻不能與Activity互動
另外,對於上述示意圖中的標註2走向,我相信很多人並沒有親自驗證過,因為通常你很難通過互動來複現這一場景。對於這種場景,我們可以通過程式碼控制來模擬:Activity A啟動Activity B,在Activity B的onCreate方法中直接呼叫finish方法
收工~