Activity启动模式

Activity任务栈

通常每个APP都有一个Activity任务栈,app中所有的Activity都存在该任务栈中,栈顶的Activity为当前正在显示的Activity。当点击Icon启动App时,会先判断当前App的任务栈是否已经存在,如果已经存在则这接把任务栈调出来显示,不存在则创建任务栈,然后将应用的Activity入口打开

启动模式

Standard

标准模式,每次启动Activity都会创建新的Activity实例,并将该Activity放到任务栈的栈顶。

SingleTop

栈顶Activity复用,例如自己启动自己,此时不会重新创建新的Activity,直接回调onNewIntent将intent传进来。

SingleTask

栈内复用,当前Activity在当前任务栈中只有一个实例。
例如: 任务栈中顺序为: A–>B–>C–>D D如果启动A时,B和C会从Activity中移除。

SingleInstance

总是在新的任务中开启,任务栈中只有一个实例,,再次启动Activity时会调用onNewIntent

taskAffinity

SingleTop和Standard启动模式下,启动Activity时设置taskAffinity属性无效,activity默认放到启动它的Activity的任务栈中。

清单文件中activity声明时加入taskAffinity属性,可以指定当前Activity存储的任务栈,没写默认是当前的包名。当Activity模式为SingltTop和Standard时,taskAffinity属性无效,不会重新创建任务栈???这里没理解。

例如:
A-->B(SingleTask)-->C(Standard) B设置了taskAffinity属性,定义了自己的任务栈,那么C存在B的任务栈中。

A-->B(SingleInstance)-->C(Standard) B为singleInstance模式,singleInstance栈中只有一个实例,此时C存在于A的任务栈中。

A-->B(SingleInstance)-->C(Standard) B为singleInstance模式,singleInstance栈中只有一个实例,此时C如果定义了taskAffinity属性会重新创建任务栈。


任务栈是系统层面的,两个Activity可以通过设置相同的taskAffinity属性来使用同一个任务栈。

使用场景

SingleTask 适合App的入口。

SingleInstance应用层开发较少用,使用与需要和应用分离的页面,例如闹钟等等。

SingleTop:适用于推送点开的页面,微信聊天,新闻页面等等。SingleTop在重用时不会再次调用onCreate只会回调onNewIntent方法。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值