回顾一下Android四个启动模式,你真的理解吗

先来贴一下官方介绍的截图:

英文版:

以下是中文版:

         看完文档之后相信大家对standard和singleTop的理解应该不会有太大问题,但是singleTask和singleInstance可能就仁者见仁智者见智了,先来看一下singleTask这个介绍,尤其是第一句“系统会创建新任务,并实例化新任务的根 Activity”,英文版“The system creates a new task and instantiates the activity at the root of the new task.”,结合后边所说,这意思不就是如果不存在该设置singleTask的Activity,系统会创建一个新的栈并且会创建一个Activity实例吗,也就是说每次发现这个实例不存在就会创建新的task栈,有人肯定说了“系统不会创建新栈来存放该Activity”。经我测试发现真就还真如所说。难道官方文档是说错了?😄

        先来说下结论:

        在不存在Activity的实例时,系统的确会创建一个新的栈来存放Activity,只不过那要看具体的情况,这就涉及到 taskAffinity(亲和力)这个属性了,在不设置这个属性的情况下,activity是和application具有相同的亲和力的,在创建singleTask的activity时,如果有相同亲和力的栈(task)已经存在了那么此时系统是不会创建新的栈的,但是如果不存在的话,就会创建新的栈。

        为什么我们看到的情况是没有见过创建新栈呢?因为我们一般不会去给activity去设置taskAffinity这个属性,你所设置singleTask的activity在没设置taskAffinity的情况下,他的亲和力是和application一样的,当打开app时就已经创建了和application对应的亲和力的栈,所以打开singleTask的activity时就没有创建新的栈。

        接下来进入实战环节,来验证上述所述:

        上代码:

         由MainActivity跳转SecondActivity,打印如下:

        但是如果我给SecondActivity设置taskAffinity属性之后,如图:

         打印如下:

        也可以给MainActivity设置 taskAffinity属性,而不是给SecondActivity,如图: 

         打印如下:

        那有人可能会说,不设置singleTask设置taskAffinity应该也会有这样的结果,上代码:

        

        打印如下:

  

        事实证明不是这样的,只有singleTask和singleInstance才会创建新栈,其实官方文档说的也很清楚,standard和singleTop都是在调用者栈中启动的activity

         好了,看了上边的代码和结论,接下来说一下singleInstance,官方文档说它和singleTask相似,只是不同的一点是设置singleInstance的Activity所在的栈,只会有它自己,按照我们已经理解的知识,可以下个结论,启动它时肯定是会创建新的栈,没错,而且不需要设置taskAffinity,看代码:

        打印如下:

         打完收工!

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值