本文总结了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。