taskAffinity

192 阅读1分钟

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 在不同的栈中。