我创建了一个 android 问题:这里
我知道你可能不相信,但这是真的。关键是 -FLAG_ACTIVITY_MULTIPLE_TASK 将创建多个具有相同 taskAffinity 的任务。
正如谷歌文档中所说,MULTIPLE_TASK 只能用作启动器。
以下是我创建此错误的方法:
1.准备 3 个活动,A1、A2、L.L - Launcher(可能是 singleInstance)、A2 - singleTask、A1 A2 具有相同的 taskAffinity
2.L 以 MULTIPLE_TASK 启动 A1。mHistory = L->[task1: A1(top)]
3.A1启动A2。mHistory = L->[task1: A1->A2(top)]
4.按HOME,开始L. mHistory = [task1: A1->A2]->HOME->L(top)
5.L 以 MULTIPLE_TASK 启动 A1。mHistory = [task1: A1->A2]->HOME->L->[task2: A1(top)]
6.A1启动A2。mHistory = [task1: A1->A2]->HOME->L->[task2: A1->A2(top)]
7.现在我们得到了两个 A2 实例 - 这是 singleTask Activity
这个BUG是因为这个flag - FLAG_ACTIVITY_MULTIPLE_TASK
。它允许使用相同的 taskAffinity 创建多个任务。当我们尝试为 singleTask A2 查找现有任务时,它首先比较 taskAffinity,而不是Activity.componentName()
.
错误代码在com/android/server/am/ActivityStack.java
line 2742 - `startActivityUncheckedLocked()`
line 520 which is in `findTaskLocked()` - first compare the taskAffinity