读书笔记-Activity启动模式

    在安卓系统,使用任务栈来管理应用的各个Activity。任务栈是一种“后进先出”的栈结构,每次新打开一个activity就会被压入栈中,back返回就有一个activity出栈,当栈为空,系统回收任务栈。启动模式就是来约束心打开的activity在任务栈的行为,有四种启动模式和若干启动标识符。

启动模式:

1  standard:标准模式,每次启动activity都会创建activity的实例,执行activity的标准生命周期,这种启动模式下的activity,谁启动了它,它就运行在启动它的那个activity运行的栈中。比如A启动模式是标准模式,B在任务栈H中,B启动A后,任务栈中就有A和B两个activity,A在栈顶。

2  singleTop:栈顶复用模式:这种模式下,如果被启动的activity正好在任务栈栈顶,则不会新建activity实例,回调onNewIntent方法。如果被启动的activity不在栈顶,则新建activity实例,比如A的启动模式singleTop,栈内有ABC三个activity,且A在栈顶,这时候启动A,执行A的onNewIntent,栈内依旧是ABC。如果A不在栈顶,则启动A,栈内ABCA。

3  singleTask:栈内复用模式:这是一种栈内单实例模式,只要该任务栈中有被启动的activity,则不会新建activity实例,回调被启动activity的onNewIntent方法。并且这种模式自带clearTop光环。比如栈内ABCD,B的启动模式是singleTask,这时候启动B,则B的onNewIntent方法被回调,CD出栈(D在栈顶,A在栈底)。

4  singleInstance:单实例模式:singleTask的加强版,具有singleTask的所有特性,此种模式的activity只能单独运行在一个任务栈中。比如A的启动模式是singleInstance,A会单独运行在一个任务栈中,由于栈内复用特性,在多次启动A都不会有A的实例生成。除非系统回收A所在的任务栈,那么启动A,则新建A和A所在的任务栈。

启动标识符:主要描述常用的

1  FLAG_ACTIVITY_NEW_TASK:和singleTask作用一样。有时也用在非Activity的Context(比如Service和Application)启动activity需要设置,否则报错。

2  FLAG_ACTIVITY_SINGLE_TOP:和singleTop作用一样

3  FLAG_ACTIVITY_CLEAR_TOP:如果启动A的使用使用这个标识符并且A启动模式标准启动模式,会把栈内A和A以上的activity全部出栈,然后新建A实例,并在栈顶。如果A的启动模式是singleTask,处理方式和singleTask一样,也可以理解singleTask自带这个标识符。

还有其他的标识符,比如规定不会出现在历史activity列表中等,参考文档。并且很多启动标识符特性需要自己测试,官方描述不够准确。

注意:启动标识符的优先级高于启动模式。启动模式符无法给activity使用clearTop这个特性,当然启动标识符也不能给activity指定singleInstance。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值