android中的singleTask launchMode无法正常工作

所以,我有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); } 

这里, Activity2 launchMode被解析为singleTask。

然后我从Activity3导航到Activity4

当我从Activity4启动Activity2 ,我相信它应该有类似的backstack

任务A.

|活性2 |

|活动1 |

任务B.

| Activity4 |

| Activity3 |

如下图所示 在此处输入图像描述

而是将新的Activity2实例添加到当前任务中

任务B.

|活性2 |

| Activity4 |

| Activity3 |

任务A.

|活性2 |

|活动1 |

请有人帮我理解这个吗?

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

如果你真的想要开始一个单独的任务,你需要调整Activity3taskAffinity ,如下所示:

  

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

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

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

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