首页 文章

Android singleTask还是singleInstance启动模式? [关闭]

提问于
浏览
84

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

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

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

3 回答

  • 30

    从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 Activities and Tasks series – An introduction to Android’s UI component model

  • 141

    以一种简单的方式 -

    singleTask:

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

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

    singleInstance-

    "singleTask" 相同,但系统 doesn't launch any other activities into the task holding the instance 除外 . 活动始终是其任务的唯一成员; any activities started by this one open in a separate task .

  • 4

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

相关问题