TaskAffinity

Task Affinity

  • 我们都比较熟悉Activity的launch mode,但是很多人并不知道TaskAffinity这个属性,这个属性可以在AndroidManifest里面的activity配置:android:taskAffinity

Task

  • 一个Task就好像它的名字一样,是一个任务,Android上把一个任务抽象成一系列的UI(Activity)去完成,比如默认情况下一个App就是一个task,一个task把UI逻辑聚合起来,一个task中的Activity在逻辑上应该是完成同一个方法的
  • 在最简单的情况下,Android设备上的每一个App都至少对应一个Task,所以分前台Task和后台Task
  • 每一个Task都是一个栈的结构

Affinity

  • 其实我认为TaskAffinity更应该理解为Task的名字,默认不设置的时候Activity的TaskAffinity是你的包名,也就是说默认情况下,app里所有的actvity都放在名为的Task里面
  • 不同的TaskAffinity理应放在不同的Task中,但是其实会有多种情况:
    • 当一个Activity有singleTask/FLAG_ACTIVITY_NEW_TASK时,会先去寻找当前的task中有没有affinity是和该activity一样的,如果有没有就会重建一个Task,如果有就会去找task里面有没有对应的实例,如果有销毁该Activity上面的Activity,否则就直接压入栈
    • 如果一个Activity有TaskAffinity但是没有singleTask/FLAG_ACTIVITY_NEW_TASK时,那TaskAffinity无效
    • 如果一个Activity没有singleTask/FLAG_ACTIVITY_NEW_TASK,那么启动它后它会存在于启动它的那个Task内(如果允许的话)
  • 如果launch mode是single instance,那创建这个activity时无论它的Affinity是什么都会创建一个新的Task,而且这个Task不允许有其他Activity

表现

  • Android操作系统有三个键,一个Home,一个Back,还有一个查看app的按键(部分Rom可能改动了),查看app其实查看的是task,即同一个application有两个task,那点击查看app页面的按键也会显示两个
  • 如果一个Activity是singleInstance启动,那在点击查看运行app键时并不会显示这个只能存放一个Activity的Task,它被认为是启动它的那个Task的一部分
  • 例:在自己的App中启动微信的Activity且不设置FLAG_ACTIVITY_NEW_TASK,那这个微信的Activity会存在于自己app的Task中,而且查看当前app时这个Activity也显示在自己的App中
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值