android:launchMode、Intent.FLAG_ACTIVITY_NEW_TASK、android:taskAffinity和近期任務列表關係

本文總結了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>
複製代碼

1.android:launchMode="standard" 和android:launchMode="singleTop"結論

當啓動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

2.android:launchMode="singleTask"結論

當啓動Main2Activity 的intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)時,MainActivity和Main2Activity的taskId是同樣的。string

當 Main2Activity 的 android:taskAffinity=「不一樣於當前包名的包名」時,MainActivity和Main2Activity的taskId不一致且近期任務列表RecentsActivity中存在2個任務選項卡。it

3.android:launchMode="singleInstance"結論

由於是Main2Activity 的android:launchMode="singleInstance",獨享一個taskId,討論Intent.FLAG_ACTIVITY_NEW_TASK就沒有意義,確定MainActivity和Main2Activity是不同的io

當 Main2Activity 的 android:taskAffinity=「不一樣於當前包名的包名」時,MainActivity和Main2Activity的taskId不一致且近期任務列表RecentsActivity中存在2個任務選項卡。

4.爲何要搞出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。

相關文章
相關標籤/搜索