1. 程式人生 > >Activity 生命週期詳細解釋

Activity 生命週期詳細解釋


1.啟動Activity:系統會先呼叫onCreate方法,這是生命週期第一個方法,然後呼叫onStart方法,最後呼叫onResume,Activity進入執行狀態。

onCreate方法:一般做一些初始化工作,比如setContentView去載入佈局資源,初始化Activity所需的資料。

onStart方法:表示Activity正在啟動,已經可見,但是無法和使用者互動。

onResume方法Activity已經可見並且開始活動,已經出現在前臺。

2.當前Activity被其他Activity覆蓋其上或被鎖屏

(可以理解為沒有完全遮擋介面的)

系統會呼叫onPause

方法,暫停當前Activity的執行。

3.當前Activity由被覆蓋狀態回到前臺或解鎖屏:

系統會呼叫onResume方法,再次進入執行狀態。

4.當前Activity轉到新的Activity介面或按Home鍵回到主屏,自身退居後臺:

系統會先呼叫onPause方法,然後呼叫onStop方法,進入停滯狀態。

5.使用者後退回到此Activity:

系統會先呼叫onRestart方法,

然後呼叫onStart方法,

最後呼叫onResume方法,

再次進入執行狀態。

6.使用者退出當前Activity:系統先呼叫onPause方法,然後呼叫onStop方法,最後呼叫onDestory方法,結束當前Activity。

但是知道這些還不夠,我們必須親自試驗一下才能深刻體會,融會貫通。

Activity四種啟動模式的區別:standard    singleTop  singleTask   singleInstance

standard:每次啟用Activity時(startActivity),都建立Activity例項,並放入任務棧; 

singleTop如果某個Activity自己啟用自己並且Activity處於棧頂則不需要創 建,其餘情況都要建立Activity例項;

singleTask:如果要啟用的那個Activity在任務棧中存在該例項,則不需要建立,只需要把 此Activity放入棧頂,即把該Activity以上的Activity例項都pop,並呼叫其onNewIntent;

singleInstance:應用1的任務棧中建立了MainActivity例項,如果應用2也要啟用 MainActivity,則不需要建立,兩應用共享該Activity例項。

onSaveInstanceState的呼叫遵循一個重要原則,即當系統“未經你許可”時銷燬了你的 activity,則onSaveInstanceState會被系統呼叫,這是系統的責任,因為它必須要提供一 個機會讓你儲存的資料

至於onRestoreInstanceState方法,需要注意的是, onSaveInstanceState方法和onRestoreInstanceState方法“不一定”是成對的被呼叫 的。 

onRestoreInstanceState被呼叫的前提是,activity A“確實”被系統銷燬了,而如果僅僅 是停留在有這種可能性的情況下,則該方法不會被呼叫,例如,當正在顯示activity A的時 候,使用者按下HOME鍵回到主介面,然後使用者緊接著又返回到activity A,這種情況下 activity A一般不會因為記憶體的原因被系統銷燬

故activity A的onRestoreInstanceState方 法不會被執行。

 另外,onRestoreInstanceState的bundle引數也會傳遞到onCreate方法中,你也可以選擇 在onCreate方法中做資料還原。

切換橫豎屏的生命週期:

1、不設定Activity的android:configChanges時,切屏會重新呼叫各個生命週期,
切橫屏時會執行一次,切豎屏時會執行兩次

2、設定Activity的android:configChanges="orientation"時,切屏還是會重新調
用各個生命週期,切橫、豎屏時只會執行一次

3、設定Activity的android:configChanges="orientation|keyboardHidden"時,
切屏不會重新呼叫各個生命週期,只會執行onConfigurationChanged方法

Activity執行時按下HOME鍵(跟被完全覆蓋是一樣的):

onSaveInstanceState -->onPause --> onStop  --> onRestart-->onStart--->onResume

Activity未被完全覆蓋只是失去焦點onPause--->onResume