TaskAffinity是Activity的一个属性,用于指定Activity所属的任务栈(Task Stack)。TaskAffinity可以翻译为“任务相关性”或“任务亲和性”,标识了一个Activity所需要的任务栈的名字。
主要作用:
TaskAffinity属性的值必须是一个字符串,且中间必须含有包名分隔符“.”。如果一个Activity没有显式地指定TaskAffinity,那么TaskAffinity属性就等于Application指明的TaskAffinity;如果Application也没有指明,那么TaskAffinity的值就等于应用的包名。
启动新的Task:
Intent intent = new Intent(this,IntentTimeActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
当AMS发现启动了一个FLAG_ACTIVITY_NEW_TASK标签的Activity时,会先去寻找当前是否存在这个Activity的task值,如果不存在的话,就会创建该task,如果存在就省去了创建 task这个步骤,然后在把要启动的Activity添加到task中。AMS分配的taskId是线性递增的,每次开启一个新的task,taskId进行+1的操作。
「allowTaskReparenting」是Activity的一个属性,用于配置是否允许该Activity更换从属的任务(Task)。当一个Activity设置了allowTaskReparenting属性,并且值为true时,该Activity可以从其启动的任务(Task)移动到由taskAffinity属性指定的任务(Task)中。如果allowTaskReparenting的值为false(默认值),Activity将保持在其启动的任务(Task)中,并在那里耗尽其整个生命周期。
taskAffinity和allowTaskReparenting这两个属性会一起使用,实现将一个应用程序的Activity移动到另一个应用程序的任务(Task)中的功能。例如,当需要在多个应用程序之间共享某些Activity时。