天天看點

Activity生命周期與啟動模式基礎知識備忘錄

Activity生命周期:

onCreate:建立Activity,通常需要調用setContentView加載界面布局資源;

onRestart:重新啟動,Activity從不可見到可見,onPause和onStop被執行了,又回到這個Activity;

onStart:正在被啟動,已經可見,但沒有出現在前台;

onResume:已經可見,出現在前台可與使用者互動;

onPause:正在停止,通常onStop緊接着會被調用,但此時若快速傳回目前Activity(使用者操作難實作),那随後onResume被調用。可以存儲資料、停止動畫;

onStop:即将停止,可以做回收工作;

onDestroy:即将銷毀,可以做回收和資源釋放工作。

生命周期備注:

1、打開新Activity時,目前Activity回調步驟:onPause-》onStop,但當新Activity為透明主題,或者非全屏時(即目前Activity仍可見),則onStop不被調用;

2、當使用者再次回到原Activity時,回調步驟:onRestart-》onStart-》onResume;

3、當使用者按下back鍵時,回調步驟:onPause-》onStop-》onDestroy;

4、onCreate和onDestroy配對=》是否配置設定記憶體建立對象;onStart和onStop配對=》是否可見;onResume和onPause配對=》是否前台運作可互動;

5、打開新Activity時,原Activity的onPause先調用,才會調用新Activity的聲明周期回調;

6、Activity異常結束會回調onSaveInstanceState,之後再次建立會調用onRestoreInstanceState,異常結束原因包括資源相關的系統配置發生改變(Activity的configChange屬性可以防止此類重建,設定orientation、mcc、mnc、locale等等,配置變化時onConfigurationChanged方法會被調用,而非重建),或者記憶體資源不足;

7、從記憶體不足時Activity被系統殺死的話題,延伸出為什麼使用Service的原因——如果一個程序中沒有四大元件在執行,那麼這個程序将很快被系統殺死,背景工作放入Service可以保證程序有一定的優先級,不容易輕易地被系統殺死;

Activity啟動模式:

1、standard:每次啟動都會建立Activity的新對象;

2、singleTop:棧頂的Activity被啟動,不重複建立,隻調用其onNewIntent函數;

3、singleTask:Task中的Activity執行個體具有唯一性,如果已經存在,隻調用其onNewIntent函數,并将其置于棧頂(可能彈出其上的Activity執行個體);

4、singleInstance:Task中隻存在一個唯一的Activity執行個體;

Intent的标記:

1、FLAG_ACTIVITY_NEW_TASK:将目标Activity執行個體放入一個新的Task中;

2、FLAG_ACTIVITY_CLEAR_TASK:先把和目标Activity有關聯的Task銷毀,然後啟動一個新的Task,注意必須和1同時使用;

3、FLAG_ACTIVITY_CLEAR_TOP:使得同一個任務棧中其上方的執行個體彈出棧,singleTask預設有此效果;