Activity 启动模式

Android的任务栈

一个Android应用程序功能通常会拆分为多个Activity,各个Activity之间通过Intent进行连接。在Android系统中,通过栈结构来保存整个App的Activity,栈底的元素是整个任务栈的发起者。一个合理的任务调度栈不仅是性能的保证,更是提供性能的基础。

一般情况下,当一个APP启动时,如果当前环境中不存在该APP的任务栈,那么系统会创建一个任务栈。此后,这个APP所启动的Activity都将在这个任务栈中被管理,这个栈也被称为一个Task,即表示若干个Activity的集合,他们组合在一起形成一个Task。特别注意,一个Task中的Activity可以来自不同的App,同一个APP的Activity也可能不在一个Task中。

Android的四种启动模式

  • standard 标准模式

默认的启动模式,如果不指定Activity的启动模式,则使用这种方式启动Activity。这种启动模式每次都会创建新的实例,每次点击standard模式创建Activity后,都会创建新的Activity覆盖在原Activity上。

  • singleTop 栈顶复用模式

如果启动 singleTop 模式下的Activity,那么在启动时,系统会判断当前栈顶Activity是否为该Activity。如果是,则不创建新的Activity而直接引用这个Activity,会走该 Activity 的 onNewIntent() 方法。如果不是,则创建一个新的 Activity

举个例子,如果当前任务栈已经有 A,B,C 三个 Activity,C 处于栈顶且为 singleTop 模式。这个时候,如果再启动 C,那么系统不会创建新的 C ,而是会掉用 C 的 onNewIntent() 方法, 当前任务栈依然是 A, B, C 三个Activity。

  • singleTask 栈内复用模式

singleTask检测整个栈中是否存在当前需要启动的 Activity 。如果存在,则将该 Activity 置于栈顶,并将该栈中 Activity 以上的 Activity 都销毁。不过这里是指在同一个 APP 中启动这个 singleTask 的 Activity。如果是其它APP来启动这个 singleTask 的 Activity,那么又分为两种情况 :
1. 这个 Activity 还未启动过,则新建一个任务栈。
2. 已经创建过,又会将该栈中位于这个 Activity 之上的 Activity 销毁,同时这个 Activity 处于栈顶。

分析一个官方例子:

当 Activity2 启动 ActivityY 时,它所在的 BackGround Task 整个都被切换到前台。当按 back 键返回时,会先返回 BackGround Task 中的 Activity X,再 按 back 才会返回 Activity 2。

这种模式可以实现一个业务 : 退出整个应用
将主 Activity 设为 singleTask 模式,然后在要退出的 Activity 中转到主 Activity,从而将主 Activity 之上的 Activity 都清除,然后重写主 Activity 的 onNewIntent() 方法,在该方法中 finish() 掉主 Activity,这样就退出了所有 Activity。

  • singleInstance 单实例模式

这是一种加强的 singleTask 模式,它除了具有 singleTask 的所有特性外,还加强了一点,那就是具有此种模式的 Activity 只能单独地位于一个任务栈中。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值