android 中的 singleTask launchMode 不工作

singleTask launchMode in android not working

所以,我有 4 个活动 Activity Activity1Activity2Activity3Activity4。我从 Activity1 开始,然后在某个事件上我开始 Activity2 然后在 Activity2 上的某个事件上我开始 Activity3 作为新任务

public void onClick(View v) {
    Intent intent = new Intent(Activity2.this, Activity3.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK|Intent.FLAG_ACTIVITY_NEW_TASK);
    startActivity(intent);
}

这里Activity2launchMode被声明为singleTask。

然后我从 Activity3 导航到 Activity4

当我从 Activity4 开始 Activity2 时,我相信它应该有像

这样的 backstack

任务 A

|Activity2|

|Activity1|

任务 B

|Activity4|

|Activity3|

如下图

而是 Activity2 的新实例作为

添加到当前任务

任务 B

|Activity2|

|Activity4|

|Activity3|

任务 A

|Activity2|

|Activity1|

有人能帮我理解一下吗?

Android 不会创建新任务,除非您尝试启动的 ActivitytaskAffinity 与当前任务的 taskAffinity 不同。 taskAffinity 优先于其他任何事情。

如果你真的想开始一个单独的任务,你需要像这样调整 Activity3taskAffinity

<activity android:name=".Activity3"
          android:taskAffinity=""/>

此外,即使 Activity4 是用 launchMode="singleTask" 声明的,Android 也不会为其创建新任务,除非它与其他活动有不同的 taskAffinity .

请注意,为同一个应用程序创建多个任务会产生很多副作用。你应该在每个任务中为根Activity提供一个uniqyue图标和一个唯一的标签,否则用户想要return到你的应用程序时会感到困惑(他将无法确定哪个各种任务中的一个是正确的)。此外,taskReparenting 可能会意外地将活动从一项任务转移到另一项任务。这些都是非常复杂的东西,大多数开发人员并不完全理解它,因此会弄错。

另外,FLAG_ACTIVITY_MULTIPLE_TASK的使用肯定是错误的。唯一需要使用它的应用程序是启动器。如果您使用相同的 Activity 启动多个任务,您将永远无法以编程方式 return 到特定的任务,并且会完全混淆您的用户。这绝对不是你想要的

在大多数情况下,您不需要执行多个任务,它通常会导致比解决的问题更多的问题。请解释为什么您认为您需要多项任务。