Activity启动模式之singleTask属性taskAffinity浅谈

 

开篇知识点:

  • activity在启动时,launchMode默认是standard模式,taskAffinity(任务相关性)默认是包名
  • 当为Activity指定launchMode为singleTask且taskAffinity为"xxx.xxx.xxx"时,系统会检测是否有同样的"xxx.xxx.xxx"存在,不存在,将会为它创建一个新的任务栈,并把此activity压进栈。存在,把位于它之上的activity出栈,它置于栈顶。
  • 特别注意:A在启动B时,默认情况下(不指定launchMode和taskAffinity,不设置Intent的Flag),新创建的B会被放入A所在的任务栈中。如果设置了Intent.FLAG_ACTIVITY_NEW_TASK,系统会去查找目标activity的taskAffinity是否存在,不存在,就创建,存在,就把该栈提到前台。

A启动B(B的launchMode是singleTask,taskAffinity默认)流程图:

 

举例说明以上即几点:

1.现在有MainActivity,launchMode和taskAffinity都是默认。

2.A、B两个activity启动模式都为singleTask,taskAffinity为“com.test.qq"。

<activity
            android:name=".activities.test.AActivity"
            android:launchMode="singleTask"
            android:taskAffinity="com.test.qq" />
        <activity
            android:name=".activities.test.BActivity"
            android:launchMode="singleTask"
            android:taskAffinity="com.test.qq" />
         <activity
            android:name=".activities.MainActivity"
            android:launchMode="standard"
          									   />

做如下操作:

Main启动A,A启动B,B启动Main,Main启动A,点返回键。此时,栈是什么情况?剩下哪个页面?

通过命令行查看日志分析(adb shell dumpsys activity activities):

1.Main启动A,可以看到,#142任务栈中有A,#141中有Main

2.A启动B,可以看到,#142中有A、B,#141中有Main

3.B启动Main,#142中有Main、A、B,#141中有Main

4.Main启动A,#142中只有A了,#141中还有Main

5.按返回键,#142栈已经没了,还剩下#141中的Main,如果再按返回键,就退出应用了。

这几点为什么这样走,在开篇知识点都有说过。

 

参考:任玉刚《Android开发艺术探索》

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值