Android 分爲四種啓動模式, 需要提前瞭解 Activity 棧信息。
standard
Activity 默認的啓動模式, 即在 Manifest 清單文件中, 指定 <activity>
標籤時, 不顯示聲明 android:launchMode 屬性, 或者顯示聲明爲 android:launchMode=“standard”
啓動的 Activity 默認在被創建的 Activity 堆棧上, 每次都會重新創建。
A, B, C 三個Activity, A 啓動 B, B 啓動 C, C 啓動 A, A 啓動 A 的順序
當前的Activity 棧,存在, A,B,C,A,A 五個Activity
singleTop
啓動的 Activity 如果在 Activity 的棧頂, 則進行復用Activity, 不重新創建。 被複用的Activity將回調 onNewIntent() 函數, 不執行onCreate()。 如果不在棧頂, 則跟 standard 的模式相同。
singleTask
- 如果當前 Activity 棧中已經存在了緩存對象, 則直接進行復用不重新創建, 並且在棧中上面的activity實例, 會被執行出棧, 被複用的 Activity 回調 onNewIntent() 函數。
例如, 當前棧信息對象爲, a, b, c, d 四個activity, 這時我調用 startActivity(new Intent(this, b.class))
, 喚起 Activity b, 這時會調用 b 的onNewIntent() 函數, 棧對象信息爲, a,b , activity c,d被移除。
- 可以創建一個新的任務棧運行
當 <activity>
標籤中, 存在 android:launchMode="singleTask"
, 並且設置屬性 android:taskAffinity="xxx.xxx"
就可以在一個新的任務中運行, 可以在多任務列表中查看這個任務, 並且可以跟其他app之間共享使用相同的taskAffinity。