taskAffinity 是用来指示 Activity 属于哪一个 Task 的,默认情况下 Activity 的 taskAffinity 是包名。在代码设置方式为:
<activity
android:name=".SecondActivity"
android:launchMode="singleTask"
android:taskAffinity="com.test.SecondActivity">
activity>
一般情况下 taskAffinity 的使用配合 Activity 的启动模式 LaunchMode 来一起使用。
默认情况下,在一个 app 中的所有 Activity 都有一样的 taskAffinity。当一个应用程序加载一个 singleTask 模式的 Activity 时,首先该 Activity 会检查是否存在与它的 taskAffinity 相同的 Task。
如果启动的 thisActivity 是 singleTask 模式的话,在它上面再次启动 otherActivity 的话,则 otherActivity 所在的 Task 是 thisActivity 所在的 Task
以上图例表示:存在三个 Activity,FirstActivity ,SecondActivity 和 ThirdActivity。其中 SecondActivity 设置了 singleTask 以及和其他两个 Activity 不同的 taskAffinity。他们的跳转流向为:
FirstActivity ——-> SecondActivity ——-> ThirdActivity
如果启动的 thisActivity 是 singleInstance 模式的话,在它上面再次启动 otherActivity 的话,则 otherActivity 所在的 Task 不在是thisActivity 所在的 Task ,singleInstance的Activity所在的Task不允许存在其他Activity
以上图例表示:存在三个 Activity,FirstActivity ,SecondActivity 和 ThirdActivity。其中 SecondActivity 设置了 singleInstance 以及和其他两个 Activity 不同的 taskAffinity。他们的跳转流向为:
FirstActivity ——-> SecondActivity ——-> ThirdActivity