Android Activity 任务和返回栈

Activity中的属性

  • taskAffinity
  • launchMode
  • allowTaskReparenting
  • clearTaskOnLaunch
  • alwaysRetainTaskState
  • finishOnTaskLaunch

launchMode

  • standard (默认启动方式)
    可以被实例化多次,一个任务可以有多个此Activity实例
  • singleTop
    如果当前任务顶部已存在实例,通过Intent启动Activity不会创建新的实例。可以被实例化多次,每个实例可以位于不同的任务,一个任务中可以有多个此实例。
  • singleTask
    创建新任务并实例化Activity,如果Activity在已有的任务中存在实例,则系统会通过调用现有实例的 onNewIntent()
    方法向其传送 Intent(对同一任务中位于此实例前面的Activity执行出栈),而不是创建新实例。一次只能存在 Activity 的一个实例。(一般应用Activity不建议使用此模式,MainActivity除外)
    注:未指定taskAffinity情况下实例化 singleTask的Activity并不一定创建新的任务,新实例化的Activity可能会进入已有的任务中,除非指定与包名不同的taskAffinity(个人理解)
  • singleInstance
    与 "singleTask" 相同,只是系统不会将任何其他 Activity 启动到包含实例的任务中。该 Activity 始终是其任务唯一仅有的成员;由此 Activity 启动的任何 Activity 均在单独的任务中打开(一般应用Activity不建议使用此模式)
Android Activity 任务和返回栈_第1张图片
显示如何将启动模式为“singleTask”的 Activity 添加到返回栈。 如果 Activity 已经是某个拥有自己的返回栈的后台任务的一部分,则整个返回栈也会上移到当前任务的顶部。

taskAffinity

taskAffinity指示 Activity 优先属于哪个任务。默认情况下,同一应用中的所有 Activity 彼此关联。 因此,默认情况下,同一应用中的所有 Activity 优先位于相同任务中。 不过,您可以修改 Activity 的默认关联。 在不同应用中定义的 Activity 可以共享关联,或者可为在同一应用中定义的 Activity 分配不同的任务关联。
taskAffinity在一下两种情况有效:

  • 启动 Activity 的 Intent 包含 FLAG_ACTIVITY_NEW_TASK
    标志
  • Activity 将其 allowTaskReparenting
    属性设置为 "true"

allowTaskReparenting

如果在任务的根 Activity 中将此属性设置为 "true",则不会发生刚才所述的默认行为。即使在很长一段时间后,任务仍将所有 Activity 保留在其堆栈中

clearTaskOnLaunch

它与 alwaysRetainTaskState 正好相反。 即使只离开任务片刻时间,用户也始终会返回到任务的初始状态

alwaysRetainTaskState

此属性类似于 clearTaskOnLaunch ,但它对单个 Activity 起作用,而非整个任务。 此外,它还有可能会导致任何 Activity 停止,包括根 Activity。 设置为 "true"
时,Activity 仍是任务的一部分,但是仅限于当前会话。如果用户离开然后返回任务,则任务将不复存在。

finishOnTaskLaunch

每当用户再次启动其任务(在主屏幕上选择任务)时,是否应关闭(完成)现有 Activity 实例 —“true”表示应关闭,“false”表示不应关闭。 默认值为“false”。如果该属性和 allowTaskReparenting 均为“true”,则优先使用该属性。 Activity 的亲和关系会被忽略。 系统不是更改 Activity 的父项,而是将其销毁。

你可能感兴趣的:(Android Activity 任务和返回栈)