android中的singleTask launchMode无法正常工作

Sus*_*ant 7 android android-activity android-navigation

所以,我有4个活动活动Activity1,Activity2,Activity3Activity4.我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);
}
Run Code Online (Sandbox Code Playgroud)

这里Activity2launchMode被标记为singleTask.

然后我导航Activity3Activity4

当我开始时Activity2,Activity4我相信它应该有像它一样的背斜

任务A.

|活性2 |

|活动1 |

任务B.

| Activity4 |

| Activity3 |

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

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

任务B.

|活性2 |

| Activity4 |

| Activity3 |

任务A.

|活性2 |

|活动1 |

请有人帮我理解这个吗?

Dav*_*ser 6

Android将不会创建一个新的任务,除非taskAffinityActivity你都争相推出是从不同的taskAffinity当前任务的.taskAffinity优先于其他任何东西.

如果你真的要开始一个单独的任务,你需要调整taskAffinityActivity3是这样的:

<activity android:name=".Activity3"
          android:taskAffinity=""/>
Run Code Online (Sandbox Code Playgroud)

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

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

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

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