taskAffiny属性理解

taskAffiny是用来指定activity的task名字,即activity被放到名字为taskAffiny属性设定的任务栈task中。如果activity没有设置taskAffiny,则使用application的taskAffiny属性,如果application也没设置taskAffiny,则使用当前包名作为task的名字。
给activity指定了taskAffiny属性,但该属性不一定生效,只有在以下情况下taskAffiny才会生效:
1. activity的启动模式为singTask或者singleInstance;
2. 启动该activity的上一个activity的启动模式是singleInstance;
这2种情况下回将该activity放到taskAffiny指定的task中,如果当前没有该task就新建一个。
其他情况下即使设置了taskAffiny属性,依然也是无效的,activity会进入到和启动它的activity相同的task。
还有一种情况,有A和B这2个activity,taskAffiny都是一样的,A的启动模式为singleInstance,A启动B。按理说A和B应该在同一个task中,但是A的启动模式决定它应该独占一个task,所以B的task不是A的task,是一个新的task,只是该task的名字和A的相同而已。即名字相同的task不一定是一个,如A启动B,B的启动模式为singleInstance,且没有设置taskAffiny,那么B的task名字和A的一样,但确是另外一个。

还有一种情况,应用A和应用B,他们的主activity分别是A1和B1,现在A1、B1的taskAffiny相同,那么如果应用A先打开,回到桌面,打开应用B,此时会进入到A的主activity A1;如果应用B先打开,回到桌面,打开应用A,此时会进入到B的主activity B1。

长按HOME键或者Navigation bar的recent key在最近应用程序列表中会显示最近访问过的应用,每个task都会以界面形式呈现在最近的应用列表中,如果想隐藏,则设置属性:
在主activity(也就是task的根activity)处设置属性:android:excludeFromRecents=“true”

查看task和activity的命令:

Adb shell dumpsys activity activities

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 【Android Activity】 什么是 Activity? 四大组件之一,通常一个用户交互界面对应一个 ac...
    Rtia阅读 3,854评论 3 18
  • 个人总结: 一个应用程序只有一个任务栈(Stack); 一个应用程序可以有多个Task(一个Task表现于回退栈,...
    画十阅读 1,771评论 0 3
  • LaunchMode 1、standard standard启动模式为最基本的启动模式,默认为该种启动模式...
    ramblejoy阅读 4,778评论 0 7
  • 第九十三章 残忍的现实 王玥低下头,看着刘逸那个可爱的笑脸,她该如何说呢?他的母亲已经死了,他的父亲,恐怕也……他...
    弘玥阅读 253评论 0 0
  • 老程和何氏脚步匆匆的往村长家里走去,“村长,村长在吗?快开门啊,有大事发生了!”“村长快点出来看看啊” 这时...
    卤蛋驾到阅读 279评论 0 2