《Android群英傳》學習筆記之Activity與Activity呼叫棧分析
阿新 • • 發佈:2018-12-13
一、Activity
1、Activity形態:
- Active/Running 處於棧頂,可互動。
- Paused 被遮擋但未被完全覆蓋,失去焦點,不可互動。
- Stopped 被完全覆蓋,但保持了所有狀態資訊和成員變數。
- Killed Activity被回收或從未被建立過。程式設計師不可控制Stop狀態下何時銷燬Activity。
2、生命週期:
- onDestroy():記得在這裡清除開啟的執行緒,因為引用會在Activity銷燬的時候銷燬,而執行緒不會。
- onPause():釋放系統資源,如Camera、sensor、receivers等。
- 系統長時間處於Stop狀態的時候,系統會根據記憶體佔用情況可能會對Acivity進行回收。但會將Acitvity的狀態通過onSaveInstanceState()方法
二、Android任務棧及啟動模式
- Android系統通過 棧(Task) 結構來儲存整個App的Activity。
1、AndroidManifest啟動模式
- (1)standard 標準模式。後進先出,Activity一個一個疊加。
- (2)singleTop
單一棧頂模式。每次建立新的Activity的時候,系統會自動檢查棧頂
- 通常用於接收到訊息後顯示的介面(eg:聊天,連續收到訊息)。
- (3)singleTask
單一任務棧模式。每次建立新的Acitivy的時候,系統會自動檢查整個任務棧是否存在相同的例項,如果存在就不會再建立了,並且會將棧中該Activity之上的所有Activity全部清除。
- 通常在主活動設定此模式,用於退出整個應用。
- (4)singleInstance
建立一個只存在此任務的新的任務棧用於多程式共享。
- 常用於需要與程式分離的介面
2、Intent Flag啟動模式
- (1)Intent.FLAG_ACTIVITY_NEW_TASK
- 使用一個新的Task來啟動一個Activity,啟動的每個Activity都將在一個新的Task中。
- 通常使用在從Service中啟動Activity,因為Service中沒有Acivity棧。
- (2)FLAG_ACTIVITY_SINGLE_TOP
- 使用singletop模式啟動一個activity,與指定android:launchMode="singleTop"相同。
- (3)FLAG_ACTIVITY_CLEAR_TOP
- 使用singleTask模式啟動一個activity,與指定android:launchMode="singleTask"相同。
- (4)FLAG_ACTIVITY_NO_HISTORY
- 當為B設定此啟動模式後,若A啟動B,B啟動C,B會在啟動C後自動銷燬,棧中只有AC。
三、清空任務棧
可在AndroidManifest檔案中的標籤下使用
- clearTaskOnLaunch:每次返回該Activity時,都將該Activity之上的所有Activity清除。
- finishOnTaskLaunch:當用戶離開這個Activity所在的Task,再返回時,該Activity就會被finish掉。
- alwaysRetainTaskState:該Activity所處的Task不接受任何清理命令,一直保持當前Task狀態。