如何让我的 Activity 的单个实例与 backstack 一起工作?

Nic*_*oso 3 android android-intent launchmode android-activity

我有一个带有MainActivityChildAaActivity的应用程序ChildBbActivity

MainActivity 可以将我们发送到任一子活动,并且用户可以根据需要在两个子活动之间移动。

但是,其中每一项活动只​​能有一个实例。

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

如果我launchMode按照标准离开,那么我会得到多个子活动实例,尤其是在两个孩子之间来回移动时。

如果我使用singleTop,那么我就会遇到这两个问题

如果我noHistory对孩子们使用,我无法在他们之间自由移动(第一次后按将使我返回到 MainActivity)

使用isTaskRoot()显然不会修复singleInstance应用程序退出错误,因为它始终为真(并且对于其他场景没有用)

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

  • 返回堆栈中每个 Activity 仅有一个实例
  • 全部在同一个任务中/切换应用程序后不要退出 onBackPress

Dav*_*ser 5

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

intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
Run Code Online (Sandbox Code Playgroud)

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