Activity生命週期和任務棧
一、Activity生命週期
onCreate():首次建立 Activity 時呼叫。 您應該在此方法中執行所有正常的靜態設定— 建立檢視、將資料繫結到列表等。
onRestart():在 Activity 已停止並即將再次啟動前呼叫。
onStart():在 Activity 即將對使用者可見之前呼叫。
onResume():在 Activity 即將開始與使用者進行互動之前呼叫。 此時,Activity 處於 Activity 堆疊的頂層,並具有使用者輸入焦點。
onPause():當系統即將開始繼續另一個 Activity 時呼叫。
此方法通常用於確認對永續性資料的未儲存更改(向儲存裝置儲存使用者編輯內容)、停止動畫以及其他可能消耗 CPU 的內容
onStop():Activity 對使用者不再可見時呼叫。如果 Activity 被銷燬,或另一個 Activity(一個現有 Activity 或新 Activity)繼續執行並將其覆蓋,就可能發生這種情況。
onDestory():在 Activity 被銷燬前呼叫。當 Activity 結束(或有人呼叫finish()方法),或系統為節省空間而暫時銷燬該 Activity 例項時,可能會呼叫它,可以通過isfinishing()方法區分這兩種情況。
要點:
1.onCreate~onResume的過程中,Activity程序不會被系統終止,onPause~onDestory過程中,系統有可能終止Activity。
2.Activity A啟動Activity B時,Activity A進入到onPause狀態,當Activity B 執行onCreat~onResume之後,Activity A才進入onStop,這是由於在Activity啟動之前,會檢查棧頂Activity要先onPause之後才會啟動新Activity。
根據以上兩點,得知不要在onPause中進行費時操作,否則會妨礙下一個Activity的體驗。
二、儲存Activity狀態
Activity進入後臺可能會被系統回收,或者橫豎螢幕切換可能被銷燬,這時可以通過onSaveInstanceState()儲存Activity的狀態資訊。當出現上述情況,系統會呼叫三、Activity任務棧
1.使用Intent的flag標誌,可以修改或定義Activity的啟動模式,且優先順序最高。 2.當使用Intent的flag指定Activity的啟動模式,或者設定了Activity的allTaskReparenting屬性為true時,可以通過taskAffinity屬性設定Activity關聯。 3.清理返回棧,如果使用者長時間離開Activity,系統會系統清除返回棧,只留下根任務。這時,可以下修改屬性:alwaysRetainTaskState:
如果在任務的根 Activity 中將此屬性設定為 "true"
,則不會發生剛才所述的預設行為。即使在很長一段時間後,任務仍將所有
Activity 保留在其堆疊中。
clearTaskOnLaunch:
如果在任務的根 Activity 中將此屬性設定為 "true"
,則每當使用者離開任務然後返回時,系統都會將堆疊清除到只剩下根
Activity。
finishOnTaskLaunch:
此屬性類似於 ,但它對單個
Activity 起作用,而非整個任務。 此外,它還有可能會導致任何 Activity 停止,包括根 Activity。 設定為 "true"
時,Activity 仍是任務的一部分,但是僅限於當前會話。如果使用者離開然後返回任務,則任務將不復存在。