3

我创建了一个 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
4

0 回答 0