推薦教學:Android教學
本文簡單介紹Activity生命週期,內容主要來自於官方文件。
在簡述各個生命週期方法前,先將總體做一下概述。我們可以從三個層面來監視Activity生命週期
完整生命週期:完整生命週期始於onCreate方法回調,止於onDestroy方法回調
可見週期:可見週期始於onStart方法回調,止於onStop方法回呼
前台週期:前台週期始於onResume方法回調,止於onPause方法回調
下面簡單介紹一下各個生命週期方法:
onCreate 生命週期的第一個方法,表示Activity正在建立(啟動)。特別說明:若您在該方法內呼叫finish方法,則會立即出發onDestroy回呼,其他生命週期不會執行
onRestart 此方法觸發的前提:onStop方法被呼叫。 onStop方法被呼叫而導致的Activity不可見到Activity再次可見時被呼叫。此方法回呼之後系統會相繼觸發onStart和onResume方法。
onStart Activity可見時呼叫(此時Activity尚未處於前台):在onCreate方法之後或由onStop方法被呼叫而導致的Activity不可見到Activity再次可見時被呼叫
onResume 此方法的回呼標識Activity處於前台。官方文件指明,這裡比較適合動畫啟動及排他性設備存取(如相機)等
onPause Activity即將進入後台時回調此方法。需要特別注意的是,若Activity A啟動Activity B,則Activity A的onPause方法回呼完成後,Activity B才會創建,因此不要在該回呼方法中做耗時操作。
onStop Activity由可見到不可見時回呼此方法
#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方法
以上是簡述activity的生命週期的詳細內容。更多資訊請關注PHP中文網其他相關文章!