Activity|Activity 启动模式

相关定义

  • standard。默认使用的模式,无论此 activity 是否已经存在于任务栈中,都会新建这个 activity 的实例。
  • singleTask。栈内复用模式。若要启动的 activity 已经存在于任务栈中,则弹出至栈顶且在 activity 之上的 同一栈内的 activity 都会出栈。onNewIntent() 方法会被回调,onStart() 和 onResume() 也会被回调。
Activity|Activity 启动模式
文章图片
singleTask 模式的 activity
  • singleTop 。栈顶复用模式。若要启动的 activity 处于 它的任务栈的栈顶,则不会创建新的实例。onNewIntent() 会被回调,onStart()、onResume() 方法也会被调用。
Activity|Activity 启动模式
文章图片
singleTop 模式的 activity.png
  • singleInstance。单实例任务栈模式。此模式下的 activity 单独开启任务栈,这个任务栈只有该 activity 一个实例。后续对 该 activity 的启动都不会创新新的实例,直接复用。onNewIntent() 会被回调(已验证)。
相关任务栈的打印验证
  • MainActivity 与 ThirdActivity 使用默认-standard模式,SecondActivity 设置了singleInstance模式,相关任务栈:
Activity|Activity 启动模式
文章图片
SecondActivity 设置了 singleInstance .png 可以看到 SecondActivity 处于单独的任务栈中,而 ThirdActivity 处于 与 Main 相同的任务栈中。
  • ThirdActivity 跳转至设置了 singleTask 模式的 MainActivity,相关任务栈:
Activity|Activity 启动模式
文章图片
MainActivity 设置 singleTask 可以看到 ThirdActivity 直接被弹出任务栈,设置了singleInstance 模式的 SecondActivity 不受影响。
  • ThirdActivity 跳转至设置了 singleTop 模式的 MainActivity ,相关任务栈:
Activity|Activity 启动模式
文章图片
MainActivity 设置了singleTop.png 【Activity|Activity 启动模式】MainActivity 不处于任务栈的栈顶,从而创建一个新的 MainActivity 的实例。

    推荐阅读