Activity启动方式的总结(2)

申明下:本文中所看到的图片部分来自参考blog
http://blog.csdn.net/biezhihua/article/details/44230603

LaunchMode

standard

默认模式,允许多实例

singleTop

相比于standard,有新的启动请求时,只有在目标activity处于当前栈顶时,才会调用onNewIntent()而不创建新实例,其他情况都和standard一致

singleTask

(这段摘自老罗的博客)设置了”singleTask”启动模式的Activity,它在启动的时候,会先在系统中查找属性值affinity等于它的属性值taskAffinity的任务存在;如果存在这样的任务,它就会在这个任务中启动,否则就会在新任务中启动。

因此,如果我们想要设置了”singleTask”启动模式的Activity在新的任务中启动,就要为它设置一个独立的taskAffinity属性值。

如果设置了”singleTask”启动模式的Activity不是在新的任务中启动时,它会在已有的任务中查看是否已经存在相应的Activity实例,如果存在,就会把位于这个Activity实例上面的Activity全部结束掉,即最终这个Activity实例会位于任务的堆栈顶端中。

singleInstance

和singleTask相比,不同点在于singleInstance activity所在的task只会有这一个activity

返回导航:singleTask和singleInstance启动的activity,尽管可能不在同一个task,但是仍然会回到原来的activity;但是singleTask可能会存在back stack“拼接”的情况

standard

这里写图片描述

singleTop

这里写图片描述

singleTask

情况1: a,b在同一个Application
这里写图片描述

情况2:a,b不在同一个Application中,或b 设置了TaskAffinity
这里写图片描述

singleInstance

这里写图片描述

总结

摘自http://blog.piasy.com/2016/03/19/Android-Task-And-Back-Stack/?utm_source=tuicool&utm_medium=referral

同一task内的activity可以是来自不同进程的activity

栈内的activity不会重新排序,只能push或者pop

standard模式允许多实例,可以在不同的task

singleTask的activity只会存在一个实例

singleTask的activity如果设置了独立的taskAffinity属性值,启动时就会在新的task中,否则会在想要的task中

singleTask的activity启动时,它会在目标task(新的task或者已有task)中查看是否已经存在相应的activity实例,如果存在,就会把位于这个activity实例上面的activity全部销毁(pop, destroy)掉,即最终这个activity实例会位于任务的堆栈顶端中

参考:
http://blog.piasy.com/2016/03/19/Android-Task-And-Back-Stack/?utm_source=tuicool&utm_medium=referral

http://www.cnblogs.com/CSU-PL/p/3794280.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值