首頁 > 常見問題 > 主體

簡述activity的生命週期

angryTom
發布: 2019-07-23 11:52:18
原創
26629 人瀏覽過

簡述activity的生命週期

推薦教學: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的生命週期

#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中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!