在清单中设置时,Intent.FLAG_ACTIVITY_NEW_TASK是多余的吗?

时间:2017-10-14 02:16:56

标签: android android-intent android-manifest

我的活动在清单文件中:

android:launchMode="singleTask"

现在,如果我从我的代码开始此活动并使用:

intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

这是多余的吗?

这个旗帜附近是什么:

Intent.FLAG_ACTIVITY_SINGLE_TOP

这是多余的吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

1.关于singleTask

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

  

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

     

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

     

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

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

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

由于你的Activity堆栈都属于一个用户" task",并且它听起来不像你有一个复杂的Intent结构,其中singleInstance可能有利于始终处理它们,我建议使用singleTask启动模式。

这是一篇很好的博客文章,可以获取更多信息,以及图片来源:Android Activities and Tasks series – An introduction to Android’s UI component model

2.关于singleTop

如果singleTop模式活动中的引导实例已存在于任务堆栈堆栈顶部,则在未创建新实例时重新启动Activity,但在这种情况下重用堆栈顶部,并将调用onNewIntent ()方法的实例将Intent对象传递给此实例。例如,如果A singleTop的启动模式,示例和A已经存在于堆栈顶部,则在A启动时调用startActivity (New Intent (this, A.class)),将不再创建实例,而是重用原始示例,并调用onNewIntent (method)的原始实例。这是此任务堆栈或A的示例。 如果singleTop模式活动中的启动已经存在且任务堆栈,但不在堆栈顶部,那么它的行为和标准相同的模式,也将创建多个实例。您可以查看understand-android-activity-launchmode

修改

这不是多余的。

为了记录用户打开这些活动,记录这些活动的开放顺序,Google引入了任务堆栈概念,以帮助维护良好的用户体验。

活动的启动模式可能会影响任务堆栈。Intent标志也会影响任务堆栈。

您可以修改代码中的任务堆栈模式,而无需在清单文件中对其进行修改,并且标志可以直接影响任务堆栈。

就像xml代码中的android:text="content"一样。tv.setText("content");在java代码中。