TaskAffinity,两个英文单词的组合,直译为任务相关性,可以用来设置Activity任务栈任务相关性的一个属性,这个属性参数指出了Activity所希望进入的任务栈的名称。
taskAffinity的特性结论:
- 具有同一相关性的 Activity 归属同一任务(从用户的角度来看,则是归属同一“应用”)
- 任务的相关性由其根 Activity 的相关性确定。(文中有测试分析)
- 我们也可以为Activity单独指定TaskAffinity属性值,来改变一个Activity所需要的任务栈,对一个应用中的Activity进行任务分组。(文中有测试分析)
- 如果未设置该属性,则 Activity 会继承为应用设置的任务相关性(请参阅 元素的 taskAffinity 属性)。应用默认相关性的名称为 元素所设置的软件包名称。
- TaskAffinity属性一般跟singleTask模式或者跟allowTaskReparenting属性结合使用,在其它情况下,没有意义。(重点分析)
- 该属性可以将不同应用中定义的Activity置于同一任务中。
- 将该属性设置为空字符串,可使指定 Activity 与任何任务均无亲和关系。有点像singleInstance的模式。单独使用一个任务栈,且其内只有指定 Activity的一个实例。
以上的结论条目有点多,但是重点是第5条,在实际使用场景中,我们也是重点分析第5条的结论。
TaskAffinity与singleTask结合使用
下面我们看一下简单的测试代码
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.hym.launchmode">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".FirstActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<action android:name