Android singleTask还是singleInstance启动模式?

Kma*_*man 84 android launch multitasking android-activity

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

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

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

Guz*_*zba 141

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

默认情况下,应用程序中的所有活动都具有彼此的亲和力 - 也就是说,它们都优先属于同一任务.

"singleInstance"活动是其任务中唯一的活动.如果它启动另一个活动,则无论其启动模式如何,该活动都将启动到另一个任务 - 就像FLAG_ACTIVITY_NEW_TASK在意图中一样.在所有其他方面,"singleInstance"模式与"singleTask"相同.

如上所述,"singleTask"或"singleInstance"活动永远不会超过一个实例,因此该实例应该处理所有新意图."singleInstance"活动始终位于堆栈的顶部(因为它是任务中唯一的活动),因此它始终处于处理意图的位置.但是,"singleTask"活动在堆栈中可能有也可能没有其他活动.如果是,则无法处理意图,并且意图被删除.(即使意图被删除,它的到来也会导致任务进入前台,它将保留在前台.)

4任务中的活动

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

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

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

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

  • 谢谢!看起来像是一个很好的阅读...事情是iv实现我实际上想要一个活动的多个实例,并且只有当前景活动是搜索活动并且执行另一个搜索时它应该使用现有活动(如市场如何运作)和为此,singeTop正是我之后,但感谢帮助反正=)谢谢 (4认同)

Tar*_*ney 30

以一种简单的方式 -

singleTask:

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

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

singleInstance-

相同"singleTask",区别在于:系统不启动任何其他活动纳入控股实例的任务.活动始终是其任务的唯一成员; 任何由此开始的活动都在一个单独的任务中打开.