如何指定 Activity 的啟動模式?
在 AndroidMainfest.xml 中通過給 <activity> 標簽指定 android:lauchMode
來選擇啟動模式。
4種啟動模式
- standard(默認):每當啟動一個 Activity,都會創建一個新的實例壓入返回棧。
- singleTop:在啟動 Activity 時如果發現返回棧的棧頂已經是該 Activity,就不會創建新的實例;如果不是,還是會創建一個新的實例壓入返回棧。
- singleTask:每當啟動一個 Activity,都會先在返回棧中檢查是否存在該 Activity 的實例,如果有,則將該實例之上的其他 Activity 全部出棧,讓該 Activity 位于棧頂;如果沒有,還是會創建一個新的實例壓入返回棧。
- singleInstance:
- 當?
singleInstance
?模式的 Activity 被啟動時,系統會為它創建一個新的、獨立的任務棧,且這個任務棧中只能包含這一個 Activity。其他 Activity 無法進入該任務棧。 - 整個系統中只會存在該 Activity 的一個實例。無論從哪個任務棧啟動它,系統都會直接復用已存在的實例,并將該實例所在的任務棧切換到前臺。
- 當從?
singleInstance
?Activity 啟動其他 Activity 時,新 Activity 會進入新的任務棧(或原啟動者所在的任務棧),而?singleInstance
?Activity 仍獨自留在自己的任務棧中。假設存在三個 Activity:A(默認 standard 模式)、B(singleInstance 模式)、C(默認 standard 模式),啟動流程如下:1. 啟動 A:系統創建任務棧 Task1,A 入棧 → A 來到前臺 Task1: [A] 2. 從 A 啟動 B:系統創建新任務棧 Task2,B 入棧(獨占)→ B 來到前臺 Task2: [B] 3. 從 B 啟動 C:系統將 C 放入 Task1(原啟動者 A 所在棧)→ C 來到前臺 Task1: [A, C] 4. 此時按返回鍵:C 出棧 → A 來到前臺 Task1: [A] → 再按返回鍵:A 出棧 → Task1 銷毀 → B 來到前臺 → 再按返回鍵:B 出棧 → Task2 銷毀整個過程中,B 始終獨自在 Task2 中,且無論啟動多少次 B,都不會創建新實例,只會將 Task2 切換到前臺。
- 當?