Handling affinities

密切关系表明了一个activity更愿意属于哪个task。默认的,同一个应用程序的所有的activity相互间有亲和力。因此,默认的,一个应用程序中的activity倾向于位于同一个task中。但是可以修改默认的activity的密切关系。不同的应用程序的activity可以有相同的密切关系,或者是同一应用的不同的activity可以指定不同的任务密切关系。

通过修改 <activity> 元素的 taskAffinity 默认属性来修改任意给定的activity的密切关系。

 taskAffinity 属性的值为字符串型,必须在<manifest>元素默认包中唯一的名字,因为系统使用该名字来唯一标识默认的任务窃密关系。

密切关系在俩种情况下生效:

  • 当包含 FLAG_ACTIVITY_NEW_TASK  的intent登录activity时。
    在默认情况下,一个新 activity 被另外一个调用了 startActivity() 方法的 activity 载入了任务之中。并压入了调用者所在的堆栈。然而,如果传递给 startActivity() Intent 对象包含了 FLAG_ACTIVITY_NEW_TASK 标记,系统会为新 activity 安排另外一个任务。一般情况下,如同标记所暗示的那样,这会是一个新任务。然而,这并不是必然的。如果已经存在了一个与新 activity 有着同样 affinity 的任务,则 activity 会载入那个任务之中。如果没有,则启用新任务。
  • 当activity的   allowTaskReparenting  属性值为 "true"时。
    它就可以从初始的任务中转移到与其拥有同一个affinity并转向前台的任务之中。比如说,一个旅行应用程序中包含的预报所选城市的天气情况的activity。它与这个应用程序中其它的activity拥有同样的affinity(默认的affinity)而且允许重定父级。你的另一个activity启动了天气预报,于是它就会与这个activity共处与同一任务之中。然而,当那个旅行应用程序再次回到前台的时候,这个天气 预报activity就会被再次安排到原先的任务之中并显示出来。

注意:如果从用户的观点来看一个.apk文件包含多个应用程序,可能想要使用taskAffinity属性来指定activity与每个应用不同的密切关系。 

你可能感兴趣的:(init)