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

How do I keep single instances of my Activities working with the backstack?

我有一个带有 MainActivityChildAaActivityChildBbActivity 的应用程序。

MainActivity 可以将我们带到 Child 活动中的任何一个,用户可以根据需要在两个 Child 活动之间移动。

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

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

如果我将 launchMode 作为标准,那么我会得到 child 活动的多个实例,尤其是在两个 children 之间来回移动时。

如果我使用singleTop,那么我有两个问题

如果我在 children 上使用 noHistory 我不能在它们之间自由移动(第一次向后按会 return 我到 MainActivity)

使用 isTaskRoot() 显然不会与 singleInstance 一起修复应用程序退出错误,因为它永远是真的(并且对其他情况没有用)

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

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

intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);

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