Activity四种启动模式详细整理

Activity四种启动模式详细整理

1.Standard

standard模式,顾名思议就是标准启动模式,默认启动模式。

一个Activity如果不知道它的启动模式,那么它就是按Standard模式启动。如果多次启动一个Activity,会生成多个实例,按顺序放在同一个任务栈中,当你按返回键时,会从移除任务栈顶部的Activity,遵循栈的后进先出的基本原则。直到这个任务栈里所有的Activity都被移除,也就是栈已经空了,系统就会回收掉这个任务栈。

这里写图片描述

2.SingleTop

SingleTop 栈顶复用模式

栈顶复用,顾名思义就是说当栈顶存在这个Activity的实例时,不会创建新的实例,而是直接复用这个实例,此时不会调用Activity的onCreate()、onStart(),但是会调用onNewIntent()方法,我们可以在该方法中处理需要改变的数据。

当然,如果在该任务栈中有这个Activity的实例,但是该实例不在栈顶,那么还是会重新创建一个实例,并压入栈顶。

singleTop模式分3种情景

  1. 当前栈中不存在该Activity的实例时,其行为同standard启动模式

  2. 当前栈中已有该Activity的实例但是该实例不在栈顶时,其行为和standard启动模式一样,依然会创建一个新的实例

  3. 当前栈中已有该Activity的实例并且该实例位于栈顶时,不会新建实例,而是复用栈顶的实例,并且会将Intent对象传入,回调onNewIntent()方法

下图可以涵盖所有这三种情景下的任务栈的情况

这里写图片描述

3.SingleTask

SingleTask–栈内复用模式

在这个模式下,如果栈中存在这个Activity的实例就会复用这个Activity,不管它是否位于栈顶,复用时,会将它上面的Activity全部出栈,并且会回调该实例的onNewIntent方法。其实这个过程还存在一个任务栈的匹配,因为这个模式启动时,会在自己需要的任务栈中寻找实例,这个任务栈就是通过taskAffinity属性指定。如果这个任务栈不存在,则会创建这个任务栈。

下面先来讲一讲taskAffinity属性。

一般情况下,同一个app里面启动的Activity都会在同一个任务栈里面。前提是我们没有为Activity指定特殊的任务栈。

每个Activity都有taskAffinity属性,这个属性指出了它创建时要进入的任务栈。如果一个Activity没有显式的指明该 Activity的taskAffinity,那么它的这个属性就等于Application指明的taskAffinity,如果 Application也没有指明,那么该taskAffinity的值就等于包名。而任务栈也有自己的affinity属性,它的值等于它的根 Activity的taskAffinity的值,即第一个入栈的Activity的taskAffinity的值,无论后面入栈的Activity的taskAffinity是啥,都不会改变。

下面同样用一张图来简单表示SingleTask模式下的情景
这里写图片描述

4.SingleInstance

SingleInstance–单实例模式,也叫全局唯一模式

该模式具备singleTask模式的所有特性,与它的区别就是,这种模式下的Activity会单独占用一个Task栈,具有全局唯一性,即整个系统中就这么一个实例,由于栈内复用的特性,后续的请求均不会创建新的Activity实例,除非这个特殊的任务栈被销毁了。以singleInstance模式启动的Activity在整个系统中是单例的,如果在启动这样的Activiyt时,已经存在了一个实例,那么会把它所在的任务调度到前台,重用这个实例。合格

以上内容为本人在工作之余整理所成,希望对初学者有所帮助,如有错误之处,烦请指正,谢谢!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值