启动模式(launchMode)

零、资料

  • 《第一行代码》
  • 《Android 开发艺术探索》

一、Stack (任务栈)

  • 栈是一种先进先出的数据结构。
  • 每当启动一个新活动时,它就会入栈并处于栈顶。
  • 每当销毁一个活动时,处于栈顶的活动就会出栈,前一个入栈的活动重新处于栈顶。
  • 任务栈分为前台任务栈和后台任务栈,后台任务栈中的Activity 位于暂停状态,用户可以通过切换将后台任务栈再次调到前台。

二、TaskAffinity (任务相关性)

  • 此参数标识了一个 Activity 所需的任务栈的名字。
  • 默认情况下,所有 Activity 所需的任务栈的名字为应用的包名。
  • 我们可以为每个 Activity 都单独指定 TaskAffinity 属性。
  • 主要和 singleTask 启动模式或 allowTaskReparenting(允许任务重排) 属性配对使用。

三、LaunchMode (启动模式)

  1. standard:

    • 标准模式,系统默认模式。每次启动一个Activity都会重新创建一个新的实例。
    • 一个任务栈中可以有多个实例每个实例也可以属于不同的任务栈。
    • 在这种模式下,谁启动了这个 Activity,那么这个 Activity 就运行在启动它的那个Activity所在的栈中。
    • 当用 ApplicationContext 去启动 standard 模式的 Activity 会报错,因为 ApplicationContext 无任务栈。
  2. singleTop:

    • 栈顶复用模式。
    • 在这种模式下,如果新Activity 已经位于任务栈的栈顶,那么此Activity不会被重新创建,同时它的onNewIntent()会被回调,通过此方法的参数我们可以取出当前请求的信息。
    • 此时被服用的 Activity 的onCreate、onStart 不会被系统调用,因为它并没有发生改变。
    • 如果新 Activity 的实例已存在但不是位于栈顶,那么新Activity 仍然会重新重建。
  3. singleTask:

    • 栈内复用模式。单实例,只要 Activity 在一个栈中存在,那么多次启动此 Activity 都不会重新创建实例,系统会回调onNewIntent()。
    • 当该模式 A 请求启动后,会先寻找是否存在 A 想要的任务栈。如不存在则创建任务栈并创建 A 压入栈中;如存在所需任务栈,则查看 A 是否在栈中如不存在则创建 A 压入栈中。
    • singleTask 默认具有 clearTop 的效果,会清空栈顶其它 Activity。
  4. singleInstance:

    • 单实例模式。
    • 加强版的 singleTask。
    • 此种模式的 Activity 只能单独地位于一个任务栈中。

2019-10-15

你可能感兴趣的:(启动模式(launchMode))