1,与任务相关的属性
taskAffinity :修改任何给定 Activity 的关联
系统使用包名标识应用的默认任务关联;
taskAffinity 属性取字符串值,必须不同于包名;
taskAffinify 起作用的两种情况
启动 Activity 的 Intent 包含 FLAG_ACTIVITY_NEW_TASK;
Activity 的 allowTaskReparenting 为 true;
lauchMode
standard,默认模式 -- 系统在启动 Activity 的任务中创建 Activity 的新实例并向其传送 Intent.Activity 可以多次实例化,每个实例可以属于不同任务,一个任务可以拥有多个实例.
singleTop -- 若当前任务的顶部已经存在 Activity 的一个实例,则系统会通过 onNewIntent() 方法传送 Intent.Activity 可以多次实例化,每个实例均可属于不同的任务,一个任务可以拥有多个实例(前提是位于返回栈顶的 Activity 并不是 Activity 的现有实例).
singleTask -- 系统创建新任务并实例化位于新任务底部的 Activity.如果该 Activity 的一个实例已经存在一个单独任务中,系统会通过现有实例的 onNewIntent() 方法向其传送 Intent.一次只能存在 Activity 的一个实例.
singleInstance -- 与 singleTask 相同,只是系统不会将任何其他 Acitivty 启动到包含实例的任务中.该 Activity 是其任务唯一仅有的成员;由此 Activity 启动的任何 Activity 均在单独任务打开.
使用 launchMode 属性为 Activity 指定的行为可以由 Intent 附带的 Activity 启动标志替代.
allowTaskReparenting -- true/false,Activity 是否可以从其启动的任务移动到与其具有关联的任务.
clearTaskOnLaunch -- true/false,若设置为 true,每当用户离开任务后返回时,系统都会将堆栈清除到只剩下根 Activity.与 alwaysRetainTaskState 刚好相反.
alwaysRetainTaskState -- true/false,用户长时间离开任务后,仍将所有 Activity 保留在其堆栈中(默认会清除根 Activity 外的其他 Activity).
finishOnTaskLaunch -- true/false,类似 clearTaskOnLaunch,但只对单个 Activity 起作用.可能导致任何 Activity 停止,包括根 Activity.用户离开后返回任务,任务将不复存在.
2,与任务相关的 Intent 标志 (启动模式)
FLAG_ACTIVITY_NEW_TASK -- 在新任务中启动 Activity.如果正在启动的 Activity 已经处于运行状态,则该任务会转到前台并恢复其最后状态,同时 Activity 会在 onNewIntent() 中收到新 Intent.
在 Activity 上下文之外启动 Activity 需要给 Intent 设置 FLAG_ACTIVITY_NEW_TASK 标志,否则会报异常.
首先会查找是否存在和被启动 Activity 具有相同亲和性的任务栈,如果有,则直接把这个栈整体移动到前台,并保持栈中状态不变.
默认情况下同一个应用中的所有 Activity 拥有相同的 taskAffinity
FLAG_ACTIVITY_SINGLE_TOP-- 如果正在启动的 Activity 是当前 Activity(位于返回战顶部),则现有实例会接收对 onNewIntent() 的调用,而不是创建新实例.产生与 singleTop 相同的行为.
FLAG_ACTIVITY_CLEAR_TOP -- 如果正在启动的 Activity 已在当前任务中运行,则会销毁当前任务顶部所有 Activity,并通过 onNewIntent() 将此 Intent 传递给 Activity 已恢复的实例.
FLAG_ACTIVITY_CLEAR_TOP 通常与 FLAG_ACTIVITY_NEW_TASK 结合使用.
3,处理关联(即 Activity 优先属于哪个任务)
(1)默认情况下,同一应用中的所有 Activity 彼此关联,优先位于相同任务中.
(2)通过 taskAffinity 属性设置关联
来源: https://www.cnblogs.com/amyzhu/p/8338608.html