affinity表示一个activity更愿意属于哪一个task.默认的,在一个应用程序中的activity的affinity相同,表示他们愿意属于同一个task中.可以为activity制定affinity以实现特殊效果.
activity的affinity可以通过manifest文件中该activity定义下的taskAffinity来指定.
注意,貌似必须用域名倒序的形式才可以,我试过只填一个普通的字符串,会报错.
affinity具体使用环境有两种.
1,intent包含FLAG_ACTIVITY_NEW_TASK的flag属性时.
这种情况下,系统会先寻找是否有与该activity的affinity相同的task,如果有,则在该task中创建该activity,否则才创建新的task.
例:
back stack A 初: A B (stack A 的 task 的 affinity为 com.test)
B start C (intent 包含FLAG_ACTIVITY_NEW_TASK 且C的affinity为 com.haha)
back stack A 后: A B
back stack B 新: C
back stack A 初: A B (stack A 的 task 的 affinity为 com.test)
B start C (intent 包含FLAG_ACTIVITY_NEW_TASK 且C的affinity为 com.test)
back stack A 后: A B C
back stack A 初: A B (stack A 的 task 的 affinity为 com.test)
back stack B 初: C (stack B 的 task 的 affinity为 com.haha)
B start D (intent 包含FLAG_ACTIVITY_NEW_TASK 且D的affinity为 com.haha)
back stack A 后: A B
back stack B 后: C D
2.activity的allowTaskReparenting为true时.
这种情况下,当与该activity的affinity相同的task到前台的时候,该activity可以自动转移到该task中.
例:
有一个旅游软件,其包含一个展示天气的activity可供外部应用程序调用,假设有一个应用程序A调用了该activity显示天气.则该activity在应用程序A的task中,此时,将旅游软件切回前台显示,则存在于A task中的天气activity自动回到旅游软件的task中.
转载请注明,谢谢.