android-启动模式为“ singleInstance”的两个活动

时间:2019-01-12 03:03:36

标签: java android android-studio

假设在一个Android应用程序中有两个活动,其启动模式为“ singleInstance”。在下面假设一个例子。

我正在从活动A-> B(launchMode="singleInstance")导航。现在从活动B->C。最后,从活动C-> D({launchMode="singleInstance")导航。

现在,我们知道活动B的实例将在另一个任务中创建,而A和C将在另一个任务中。

现在,我的问题是,活动D的任务实例将放置在哪个位置。是活动B,还是为活动D创建其他任务。

谢谢。

1 个答案:

答案 0 :(得分:2)

如果您不想阅读说明,我将粗体回答。

使用launchMode="singleInstance"时,要记住两件事:

  • 将始终在新任务中创建活动
  • 从该活动启动的所有活动将在单独的任务中创建

因此,启动模式为singleInstance的活动将始终隔离在其自己的任务中。该任务中将没有其他活动。

以活动A,B,C和D问题中的示例为例:

  • 活动A启动活动B
  • 活动B为launchMode="singleInstance",因此它是一项新任务
  • 活动B启动活动C
  • 活动C在与活动A相同的任务中启动
  • 活动C启动活动D
  • 活动D为launchMode="singleInstance",因此它是一项新任务

从这里发生的情况来看,您有一个任务可以存储launchMode="standard"活动A和活动C。活动B在它自己的任务中。 活动D是它自己的任务。

因此,如果您选择退出这些活动,则会注意到:

  • 支持活动D,并显示活动C
  • 支持活动C,并显示活动A

发生这种情况是因为活动C与活动A处于同一任务上。

此外,由于launchMode="singleInstance",活动D肯定不会与活动B处于同一任务,因为活动B的任务仅适用于活动B。

请记住,一次可以在后台执行任何数量的任务。只是如果持有太多内存或系统需要内存,它将开始破坏您多个任务中的这些后台活动。