android 中的 singleTask launchMode 不工作
singleTask launchMode in android not working
所以,我有 4 个活动 Activity Activity1
、Activity2
、Activity3
和 Activity4
。我从 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
|Activity2|
|Activity1|
任务 B
|Activity4|
|Activity3|
如下图
而是 Activity2
的新实例作为
添加到当前任务
任务 B
|Activity2|
|Activity4|
|Activity3|
任务 A
|Activity2|
|Activity1|
有人能帮我理解一下吗?
Android 不会创建新任务,除非您尝试启动的 Activity
的 taskAffinity
与当前任务的 taskAffinity
不同。 taskAffinity
优先于其他任何事情。
如果你真的想开始一个单独的任务,你需要像这样调整 Activity3
的 taskAffinity
:
<activity android:name=".Activity3"
android:taskAffinity=""/>
此外,即使 Activity4
是用 launchMode="singleTask"
声明的,Android 也不会为其创建新任务,除非它与其他活动有不同的 taskAffinity
.
请注意,为同一个应用程序创建多个任务会产生很多副作用。你应该在每个任务中为根Activity
提供一个uniqyue图标和一个唯一的标签,否则用户想要return到你的应用程序时会感到困惑(他将无法确定哪个各种任务中的一个是正确的)。此外,taskReparenting
可能会意外地将活动从一项任务转移到另一项任务。这些都是非常复杂的东西,大多数开发人员并不完全理解它,因此会弄错。
另外,FLAG_ACTIVITY_MULTIPLE_TASK
的使用肯定是错误的。唯一需要使用它的应用程序是启动器。如果您使用相同的 Activity
启动多个任务,您将永远无法以编程方式 return 到特定的任务,并且会完全混淆您的用户。这绝对不是你想要的
在大多数情况下,您不需要执行多个任务,它通常会导致比解决的问题更多的问题。请解释为什么您认为您需要多项任务。
所以,我有 4 个活动 Activity Activity1
、Activity2
、Activity3
和 Activity4
。我从 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
时,我相信它应该有像
任务 A
|Activity2|
|Activity1|
任务 B
|Activity4|
|Activity3|
如下图
而是 Activity2
的新实例作为
任务 B
|Activity2|
|Activity4|
|Activity3|
任务 A
|Activity2|
|Activity1|
有人能帮我理解一下吗?
Android 不会创建新任务,除非您尝试启动的 Activity
的 taskAffinity
与当前任务的 taskAffinity
不同。 taskAffinity
优先于其他任何事情。
如果你真的想开始一个单独的任务,你需要像这样调整 Activity3
的 taskAffinity
:
<activity android:name=".Activity3"
android:taskAffinity=""/>
此外,即使 Activity4
是用 launchMode="singleTask"
声明的,Android 也不会为其创建新任务,除非它与其他活动有不同的 taskAffinity
.
请注意,为同一个应用程序创建多个任务会产生很多副作用。你应该在每个任务中为根Activity
提供一个uniqyue图标和一个唯一的标签,否则用户想要return到你的应用程序时会感到困惑(他将无法确定哪个各种任务中的一个是正确的)。此外,taskReparenting
可能会意外地将活动从一项任务转移到另一项任务。这些都是非常复杂的东西,大多数开发人员并不完全理解它,因此会弄错。
另外,FLAG_ACTIVITY_MULTIPLE_TASK
的使用肯定是错误的。唯一需要使用它的应用程序是启动器。如果您使用相同的 Activity
启动多个任务,您将永远无法以编程方式 return 到特定的任务,并且会完全混淆您的用户。这绝对不是你想要的
在大多数情况下,您不需要执行多个任务,它通常会导致比解决的问题更多的问题。请解释为什么您认为您需要多项任务。