本文總結了android:launchMode、Intent.FLAG_ACTIVITY_NEW_TASK、android:taskAffinity和近期任務列表RecentsActivity關係android
實驗輔助工具:經過adb shell dumpsys activity 命令觀察 activity所屬task棧的id(在輸出中搜索Running activities,帶#號的就是該activity所屬task棧的id)shell
手機版本:官方模擬器api25api
現有MainActivity,和將要跳轉的Main2Activitybash
MainActivity manifest中屬性以下工具
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
複製代碼
當啓動Main2Activity 的intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)時,MainActivity和Main2Activity的taskId是同樣的。spa
當啓動 Main2Activity 的 intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) && android:taskAffinity=「不一樣於當前包名的包名」時,MainActivity和Main2Activity的taskId不一致且近期任務列表RecentsActivity中存在2個任務選項卡。code
當啓動Main2Activity 的intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)時,MainActivity和Main2Activity的taskId是同樣的。string
當 Main2Activity 的 android:taskAffinity=「不一樣於當前包名的包名」時,MainActivity和Main2Activity的taskId不一致且近期任務列表RecentsActivity中存在2個任務選項卡。it
由於是Main2Activity 的android:launchMode="singleInstance",獨享一個taskId,討論Intent.FLAG_ACTIVITY_NEW_TASK就沒有意義,確定MainActivity和Main2Activity是不同的io
當 Main2Activity 的 android:taskAffinity=「不一樣於當前包名的包名」時,MainActivity和Main2Activity的taskId不一致且近期任務列表RecentsActivity中存在2個任務選項卡。
有時候咱們須要在近期任務列表RecentsActivity中存在多個任務卡,好比一個任務卡看消息,一個任務卡寫做,對用戶比較友好,用戶很方便切換。若是想搞出2個任務選項卡,必需要加的條件就是android:taskAffinity=「不一樣於當前包名的包名」,至於生不生效就看該Main2Activity的啓動模式了,若是是android:launchMode="singleTask"和android:launchMode="singleInstance"加上android:taskAffinity=「不一樣於當前包名的包名」就直接生效,若是是android:launchMode="standard" 和android:launchMode="singleTop"除了得加上android:taskAffinity=「不一樣於當前包名的包名」之外還有加上Intent.FLAG_ACTIVITY_NEW_TASK。