Android singleTask或singleInstance启动模式?

我有一个应用程序有一个列表作为其主要活动,然后你可以点击打开该项目的详细视图的项目。 我也有一个类似主要活动的search活动,并按预期工作。

不过,我希望这个search活动只在栈上有一个实例,以便用户可以多次search,而点击返回将返回到他们在开始search之前所在的视图(而不是返回到前面的search结果)

singleTask和singelInstance启动模式似乎做我想要的,所以我不知道哪一个我应该用于这个目的,为什么?

从Android开发指南的应用基础页面:

默认情况下,应用程序中的所有活动都具有相互关联性 – 也就是说,他们都偏好属于同一个任务。

“singleInstance”活动是其唯一的活动。 如果它启动另一个活动,则不pipe其启动模式如何,该活动都将启动到不同的任务中 – 就好像FLAG_ACTIVITY_NEW_TASK的意图一样。 在所有其他方面,“singleInstance”模式与“singleTask”相同。

如上所述,“singleTask”或“singleInstance”活动不会有一个以上的实例,所以这个实例可以处理所有新的意图。 一个“singleInstance”活动总是在堆栈顶部(因为它是任务中唯一的活动),所以它总是处于处理意图的位置。 然而,一个“singleTask”活动在堆栈中可能有或者没有其他的活动。 如果是这样,那么它就无法处理这个意图,意图就被抛弃了。 (即使意图被放弃了,它的到来也会导致任务到达前台,并保持原样)。

4任务中的活动

由于在任何一种启动模式下都不会有多个Activity的实例,所以后退button会一直带您到您案例中现有的Activity实例。

一个重要的区别是,“singleTask”不需要为select某些东西时启动的新活动创build新任务。 也不必每次都在后退button上删除新的任务。

由于您的Activity堆栈都属于一个用户“任务”,而且听起来并不像您拥有一个复杂的Intent结构,其中singleInstance可能总是有利于处理它们,所以我build议使用singleTask启动模式。

这是一个很好的博客文章,以获得更多的信息,以及相关图片: Android活动和任务系列 – Android的UI组件模型介绍

以一种简单的方式 –

singleTask:

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

注意:尽pipe活动在新任务中开始,但后退button仍会将用户返回到上一个活动。

singleInstance-

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

singleTasksingleInstance活动只能开始一项任务。 他们总是在活动堆栈的根源。 而且,设备一次只能容纳一个活动的实例 – 只有一个这样的任务。
更多android:launchMode 。