Application Fundamentals (2/n)

两盒软妹~` 提交于 2020-01-22 09:15:09

1. Activities and Tasks



1.2 Affinities and new tasks
默认情况下,在一个程序中的所有activity都在一个affinity中,这个也使这些activity属于同一个task。但是我们可以在<activity>标签中设置taskAffinity属性来为每一个activity指定一个单独的affinity。不同的应用程序的activity可以被指定为相同的affinity,在同一个应用程序的多个activity也可以被指定为在不同的affinity中。在两种情况下,affinity会起作用:
1) 启动activity的Intent对象中包含FLAG_ACTIVITY_NEW_TASK标志。
2) 一个activity将allowTaskReparenting属性 设置为true。

FLAG_ACTIVITY_NEW_TASK 标志:
默认情况下,通过startActivity()方法激活的activity会加入到和调用者相同的task中,也会放到和存放调用者相同的stack中。但如果传递给 startActivity()方法的的Intent对象包含了FLAG_ACTIVITY_NEW_TASK标志,系统就会把这个新激活的activity放到一个不同的task中去。正如这个标志的字面意义那样,它是一个新的task。然而,这种情况不是绝对的。如果已经存在了一个和新激活的activity拥有相同的 affinitiy,那么这个activity就会直接放入这个新的task中。

allowTaskReparenting 属性:
若一个activity的allowTaskReparenting属性被设置为true,那么这个activity就可以从它启动时初始的task移动到新的展示的task中(it can move from the task it starts in to the task it has an affinity for when that task comes to the fore)。比如,在一个关于旅游的应用程序中一个activity是报告选择的城市的天气情况的,它的affinity和这个应用程序中的其它activity都是相同的(默认情况),但是它的allowTaskReparenting属性被设置为true。这时,此应用另外一个activity启动了这个报告天气情况的activity,那么这个报告天气情况的activity就被加入到那个调用activity相同的task中。然而,当这个关于旅游的应用程序离开前台,这个报告天气情况的activity会被重新分配到新的当前显示的task中。(However, when the travel application next comes forward, the weather reporter will be reassigned to and displayed with that task)

如果一个.apk文件包含了从用户角度来说多个应用程序的话,你可能希望给acitvity分配不同的affinity。



易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!