Android中的singleTask launchMode无法正常工作

时间:2016-03-08 06:45:29

标签: android android-activity android-navigation

所以,我有4个活动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

当我从Activity2开始Activity4时,我认为它应该有像

这样的背书

任务A

|活性2 |

|活性1 |

任务B

| Activity4 |

| Activity3 |

如下图enter image description here

所示

但是,Activity2的新实例将作为

添加到当前任务中

任务B

|活性2 |

| Activity4 |

| Activity3 |

任务A

|活性2 |

|活性1 |

有人可以帮我理解这个吗?

1 个答案:

答案 0 :(得分:6)

除非您尝试启动的taskAffinity的{​​{1}}与当前任务的Activity不同,否则Android不会创建新任务。 taskAffinity优先于其他任何事情。

如果你真的想要开始一项单独的任务,你需要像这样调整taskAffinity的{​​{1}}:

taskAffinity

此外,即使使用Activity3声明<activity android:name=".Activity3" android:taskAffinity=""/> ,Android也不会为其创建新任务,除非其他活动与Activity4不同。

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

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

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