如何让我的活动的单个实例与叠堆一起工作?

问题描述:

我有一个应用程序MainActivityChildAaActivityChildBbActivity如何让我的活动的单个实例与叠堆一起工作?

MainActivity可以将我们发送到任何一个Child活动,并且用户可以在他们想要的两个Child活动之间移动。

但是,每个活动只能有一个实例。

问题是,如果我让孩子活动singleInstance,那么它们都是独立的任务,并切换到另一个应用程序,并回到孩子意味着onBackPress我退出程序(当我应该回到MainActivity)

如果我将launchMode作为标准离开,那么我会得到多个儿童活动实例,特别是在两个孩子之间来回移动时。

如果我使用singleTop,然后我有两个问题

如果我对孩子使用noHistory我不能*地在它们之间移动(第一回按会回到我MainActivity)

使用isTaskRoot()明显不会与singleInstance一起修复应用程序退出错误,因为它永远是真实的(并且对于其他场景无用)

我应该如何正确实现我需要的行为?

  • 在后面堆
  • 都在同一个任务的每个活动只有一个实例/不退出onBackPress切换应用程序
+1

这是我会怎么做:有两个活动,MainActivity和ChildActivity,开始时ChildActivity将显示任一FragmentA或FragmentB。然后,您可以使用片段事务轻松地在FragmentA和FragmentB之间切换,同时保留ChildActivity,并且您还可以在需要时轻松导航回MainActivity。 –

后,您不需要任何特殊的启动模式。当你启动一个子Activity,请使用以下标志:

intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); 

这将Activity的现有实例移动到任务堆栈的前面(如果有的话),或创建一个新的实例(如果有不是现有的实例)。

+0

谢谢,这似乎是解决方案。我用标志考虑,但我希望从清单等价物,以避免它曾经被错过在未来的变化 –

+0

没有,有没有办法从清单中做到这一点。它比配置更具有行为意义。您是否想要重新使用现有的实例不是您可以配置的。 –