天天看点

Android Activity启动模式详解

zzz~

Activity 是 Android 中重要的一部分 下面我们来了解下

Activity 的四个启动模式

  • 标准模式(

    Standard

  • 栈顶复用模式(

    SingleTop

  • 栈内复用模式(

    SingleTask

  • 单例模式(

    SingleInstance

    我们都知道 Android 是通过堆栈的方式 管理的 每加载一个新的 Activity 就会添加到 当前堆栈的顶部 , 以此类推

    每次按 Back 键 或 调用 finish 方法 结束掉当前 Activity 的时候 都会把当前 Activity 从 堆栈任务 里面去掉

启动模式 详细介绍

  • 标准模式(

    Standard

    • 标准模式为 Activity 的默认启动模式
    • 每启动一次 Activity , 就会创建一个新的 Activity 实例 和 置于栈顶
    • 新的 Activity 运行在 启动它的 Activity 所在的 堆栈中
    • 因为 ApplicationContext 没有任务栈 , 故无法采用标准模式启动 Activity

      必须要为待启动的 Activity 指定标记 :

      intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)

      所以启动的时候就会为其创建一个新的任务栈
      Android Activity启动模式详解
  • 栈顶复用模式(

    SingleTop

    • 若需要新建的 Activity 已经位于任务栈 栈顶的话 , 则该 Activity 实例不会重新创建 , 而是重用栈顶的实例

      调用实例里面的 onNewIntent() 方法 , 而不会重新调用 onCreate() 和 onStart() 方法

    • 否则 , 就会创建该 Activity 新的实例 并且 置于栈顶
      Android Activity启动模式详解
  • 栈内复用模式(

    SingleTask

    • 查看创建的 Activity 是否存在此任务栈 , 若不存在则重新创建一个任务栈 , 创建该 Activity 实例 且 置于栈中
    • 若存在 则查看该 Activity 是否存在任务栈 栈内

      存在

      : 则将当前 Activity 实例以上的所有 Activity 移出任务栈 , 使当前 Activity 置于栈顶 并 调用 onNewIntent() 方法

      不存在

      : 创建一个 新的 Activity 实例 并 置于栈顶
    • 可以通过 TaskAffinity 属性 指定 Activity 想要的任务栈

      Android Activity启动模式详解
  • 单例模式(

    SingleInstance

    • 直接创建一个新的 任务栈 和 创建该 Activity 实例 放入新创建的栈中
    • 栈内复用模式

      (singleTask)

      的加强版
    • 一旦该模式的 Activity 实例已经存在于某个栈中 , 任何应用激活该 Activity 时都会重新使用该栈中的实例 且 进入到该应用中
    • 即 多个应用共享该栈中的该 Activity 实例
      Android Activity启动模式详解

启动模式的设置方式

启动模式有2种设置方式:在

AndroidMainifest

设置、通过

Intent

设置标识

在 AndroidMainifest 的 Activity 配置进行设置

<activity
android:launchMode="启动模式"
//属性
//standard:标准模式
//singleTop:栈顶复用模式
//singleTask:栈内复用模式
//singleInstance:单例模式
//如不设置,Activity的启动模式默认为**标准模式(standard)**
</activity>
           

通过Intent设置标识

Intent inten = new Intent (ActivityA.this, ActivityB.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
           

标识属性 说明

FLAG_ACTIVITY_SINGLE_TOP : 指定启动模式为栈顶复用模式 (

SingleTop

)

FLAG_ACTIVITY_NEW_TASK : 指定启动模式为栈内复用模式 (

SingleTask

)

FLAG_ACTIVITY_CLEAR_TOP : 所有位于其上层的Activity都要移除,

SingleTask

模式默认具有此标记效果

FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS : 具有该标记的Activity不会出现在历史Activity的列表中,即无法通过历史列表回到该Activity上

二者设置的区别

  • 优先级不同

    Intent

    设置方式的优先级 >

    Manifest

    设置方式,即 以前者为准
  • 限定范围不同

    Manifest

    设置方式无法设定

    FLAG_ACTIVITY_CLEAR_TOP

    Intent

    设置方式 无法设置单例模式(

    SingleInstance

以上 就是本文要介绍的 Android Activity 四种 启动模式的 详细说明 和 使用方式