Android singleTask还是singleInstance启动模式?

我有一个应用程序,其中有一个列表作为其主要活动,然后您可以单击项目打开该项目的详细视图。 我还有一个类似于主要活动的搜索活动,并按预期工作。

但是,我希望此搜索活动只在堆栈上有一次实例,以便用户可以多次搜索并单击返回将它们返回到他们开始搜索之前所处的前一个视图(而不是返回到前一个搜索结果)

singleTask和singelInstance启动模式似乎都做我想要的,所以我不确定我应该为此目的使用哪一个以及为什么?

Kman asked 2019-09-11T07:40:47Z
3个解决方案
141 votes

从Android开发指南的Application Fundamentals页面:

默认情况下,一个中的所有活动   应用程序对每个都有亲和力   其他 - 也就是说,有偏好   因为他们都属于同一个人   任务。

“singleInstance”活动代表   独自作为其唯一的活动   任务。 如果它开始另一个活动,   该活动将发布到   不管它有什么不同的任务   启动模式 - 好像   FLAG_ACTIVITY_NEW_TASK出现在   意图。 在所有其他方面,   “singleInstance”模式与之相同  “singleTask”。

如上所述,永远不会有更多   而不是“singleTask”的一个实例   “singleInstance”活动,这样   实例有望处理所有新的  意图。 “singleInstance”活动   总是在堆栈的顶部   (因为它是唯一的活动   任务),所以它始终在位   处理意图。 但是,一个   “singleTask”活动可能会也可能不会   在其上面有其他活动   堆。 如果确实如此,则不在   处理意图的位置,以及   意图被删除。 (尽管如此   意图被取消,它的到来会   已经导致任务来到了   前景,它会留在哪里。)

4 Activities in a Task

由于具有任一启动模式的活动永远不会有多个实例,因此后退按钮将始终将您带到您的案例中的活动的现有实例。

一个重要的区别是“singleTask”不需要为选择某些内容时启动的新活动创建新任务。 也不必每次都在后退按钮上删除新任务。

由于您的Activity堆栈完全属于一个用户“任务”,并且听起来您没有复杂的Intent结构,其中singleInstance可能有利于始终处理它们,我建议使用singleTask启动模式。

这是一篇很好的博客文章,了解更多信息,以及图片来源:Android活动和任务系列 - Android UI组件模型简介

Guzba answered 2019-09-11T07:41:51Z
30 votes

以一种简单的方式 -

singleTask:

系统创建新任务并在新任务的根目录下实例化活动。 但是,如果活动的实例已存在于单独的任务中,则系统会通过调用其方法将意图路由到现有实例,而不是创建新实例。 一次只能存在one instance活动。

注意:虽然活动在新任务中启动,但“后退”按钮   仍然将用户返回到上一个活动。

singleInstance-

"singleTask"相同,但系统不会在持有实例的任务中启动任何其他活动。 活动始终是其任务的唯一成员; 任何由此开始的活动都在一个单独的任务中打开。

Tarun Varshney answered 2019-09-11T07:42:47Z
4 votes

singleTasksingleInstance活动只能开始一项任务。 它们始终位于活动堆栈的根部。 此外,设备一次只能保存一个活动实例 - 只有一个这样的任务。
更多android:launchMode。

Rupesh Yadav answered 2019-09-11T07:43:18Z
translate from https://stackoverflow.com:/questions/3219726/android-singletask-or-singleinstance-launch-mode