请选择 进入手机版 | 继续访问电脑版

AndroidManifest的Activity的属性taskAffinity

[复制链接]
谭先生 发表于 2021-1-1 18:31:42 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
  配景:在做公司项目插件化的过程中,在Activity01跳转到Activity02,从Activity02跳转到微信的LauncherUI界面,模仿点击后,再跳转到Activity02,但是在Activity02点击返回按钮,返回的是LauncherUI界面而不是Activity02界面。(此中Activity01和Activity02是自己写的界面)
管理bug:在AndroidManifest给Activity02添加属性 android:taskAffinity="${taskAffinity}"即可
affinity指的是Activity的归属,即Activity属于哪个Task。如果一个Activity没有显式的指出TaskAffinity,那么它的这个属性就即是Application指明的taskAffinity,如果Application也没有指明,那么该taskAffinity的值就即是应用的包名。该属性的值可以指定为任意字符串,但是必须至少包罗一个"."。


  • 应用场景1
      根据affinity重新为Activity选择宿主task(与allowTaskReparenting属性共同使用)。
      当把Activity的allowTaskReparenting属性设置为true时,Activity就拥有了一个转移所在Task的本领。
      即:一个Activity现在是处于某个Task中的,但是它与别的一个Task具有相同的affinity值,那么当别的一个Task切换到前台时,该Activity就可以转移到现在的这个任务当中。allowTaskReparenting默认是继承至application中的allowTaskReparenting=false,如果为true,则体现可以更换;false体现不可以。
      好比Demo调用Z分身内里写的PopShareActivity,PopShareActivity的allowTaskReparenting属性设置为true,这个Activity和Z分身的所有其它Activity具有相同的affinity值。这时,Demo通过Intent启动了PopShareActivity,那么此时这个Activity应该和Demo是在同一个任务当中的。但是当把Z分身切换到前台的时候,这个Activity就会被转移到Z分身的任务当中,并显示出来。如果再将Demo切换到前台,发现Demo应用Task里的谁人Acivity消失了。
  • 应用场景2
      启动一个Activity过程中Intent使用了FLAG_ACTIVITY_NEW_TASK标志,根据affinity查找或创建一个新的具有对应affinity的task
      当调用startActivity()方法来启动一个Activity时,默认是将它放入到当前的任务当中。但是,如果在Intent中参加了FLAG_ACTIVITY_NEW_TASK flag的话,情况就会变的复杂起来。
      首先,系统会查抄这个Activity的affinity是否与当前Task的affinity相同,如果相同的话,就会把它放入到当前的Task当中,如果差别则会先去查抄是否已经有一个名字与该Activity的affinity相同的Task,如果有,这个Task将被调到前台,同时这个这个Activty将显示在这个Task的顶端;如果没有的话,系统将会实验为这个Activity创建一个新的Task。需注意的是,如果一个Activity在manifest文件中声明的启动模式是“singleTask",那么他被启动的时候,行为模式会和前面提到的指定FLAG_ACTIVITY_NEW_TASK一样。

来源:https://blog.csdn.net/aaqian1/article/details/111942187
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


专注素材教程免费分享
全国免费热线电话

18768367769

周一至周日9:00-23:00

反馈建议

27428564@qq.com 在线QQ咨询

扫描二维码关注我们

Powered by Discuz! X3.4© 2001-2013 Comsenz Inc.( 蜀ICP备2021001884号-1 )