美文网首页
taskAffiny属性理解

taskAffiny属性理解

作者: 御风逍遥 | 来源:发表于2018-03-24 10:59 被阅读12次

    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

    相关文章

      网友评论

          本文标题:taskAffiny属性理解

          本文链接:https://www.haomeiwen.com/subject/olkqcftx.html