我的活动在清单文件中:
android:launchMode="singleTask"
现在,如果我从我的代码开始此活动并使用:
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
这是多余的吗?
这个旗帜附近是什么:
Intent.FLAG_ACTIVITY_SINGLE_TOP
这是多余的吗?
谢谢!
答案 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代码中。