理解Android 中的啟動模式
眾所周知這是 Activity 的預設模式,如果不去設定launchMode
屬性,Activity預設啟動模式是介個。
1. Activity1多次啟動後,當前Activity棧中會出現多個Activity例項。
2. 始終為Intent建立新例項。
singleTop
-
Activity在當前Activity棧頂的情況,不會重新建立Activity例項,第二次開啟會呼叫
onNewIntent(Intent intent)
將新的Intent物件傳入 -
等效於
Intent intent = new Intent(getApplicationContext(), xxxActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); startActivity(intent); 複製程式碼
-
如果不是在棧頂,則會和 standard 模式一樣,建立新的例項。
singleTask
當前應用的 Activity 的棧中只會存在一個Activity例項
-
當該模式已啟動的 Activity 被再次啟動時,會呼叫
onNewIntent(Intent intent)
然後將上面所有 Activity 全部清理(包括自己),全部調至onDestroy()
生命週期 - 沒有 Intent#FLAG 與這種模式匹配
-
可以使用如下
Intent intent = new Intent(getApplicationContext(), xxxActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); 複製程式碼
-
和上部分 3 的區別,Intent.FLAG_ACTIVITY_CLEAR_TOP(不會殺死目標Activity)
Intent intent = new Intent(getApplicationContext(), xxxActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(intent); 複製程式碼