affinity的解释与示例

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中.


转载请注明,谢谢.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值