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)
      所以启动的时候就会为其创建一个新的任务栈
      在这里插入图片描述

  • 栈顶复用模式(SingleTop
    • 若需要新建的 Activity 已经位于任务栈 栈顶的话 , 则该 Activity 实例不会重新创建 , 而是重用栈顶的实例
      调用实例里面的 onNewIntent() 方法 , 而不会重新调用 onCreate() 和 onStart() 方法
    • 否则 , 就会创建该 Activity 新的实例 并且 置于栈顶
      在这里插入图片描述

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

    • 若存在 则查看该 Activity 是否存在任务栈 栈内

      存在 : 则将当前 Activity 实例以上的所有 Activity 移出任务栈 , 使当前 Activity 置于栈顶 并 调用 onNewIntent() 方法
      不存在 : 创建一个 新的 Activity 实例 并 置于栈顶

    • 可以通过 TaskAffinity 属性 指定 Activity 想要的任务栈
      在这里插入图片描述

  • 单例模式(SingleInstance
    • 直接创建一个新的 任务栈 和 创建该 Activity 实例 放入新创建的栈中
    • 栈内复用模式 (singleTask) 的加强版
    • 一旦该模式的 Activity 实例已经存在于某个栈中 , 任何应用激活该 Activity 时都会重新使用该栈中的实例 且 进入到该应用中
    • 即 多个应用共享该栈中的该 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_TOPIntent 设置方式 无法设置单例模式(SingleInstance

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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值