TaskAffiity 是什么
1、TaskAffinity 用来标记Activity 是属于哪个任务栈。
2、默认情况下,一个应用中所有的Activity的栈为应用的包名。
3、TaskAffinity 一般和singleTask 模式或者是allowTaskReparenting 结合使用。
为什么要引入TastAffinity
TaskAffinity 如何使用
TaskAffinity 和 singleTaskn 模式结合
MainActivity 中启动Test01Activity ,Test01Activity 的配置如下:
设置了启动模式launchMode 和 taskAffinity
<activity
android:name=".Test01Activity"
android:exported="false"
android:launchMode="singleTask"
android:taskAffinity="com.cdx.test01" />
MainActivity 代码如下:
内部就是打印了一下taskId 和 跳转到Test01Activity
class MainActivity : AppCompatActivity() {
private val TAG = "cdxTest"
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
Log.i(TAG, "taskId:" + this.taskId)
startActivity(Intent(this, Test01Activity::class.java))
}
}
Test01Activity 的代码如下:
内部就是打印了taskId
class Test01Activity : AppCompatActivity() {
private val TAG = "cdxTest"
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_test01)
Log.i(TAG,"Test01 taskId:" + this.taskId)
}
}
然后我们查看打印结果:
两个页面的taskId是不一样的
通过命令 adb shell dumpsys activity activities 查看栈的情况。
结论:
我们确实可以通过singleTask 和 taskAffinity 的方式设置Activity 在不同的栈中。