【问题标题】:Is Intent.FLAG_ACTIVITY_NEW_TASK redundant when already set in manifest?Intent.FLAG_ACTIVITY_NEW_TASK 已经在清单中设置时是多余的吗?
【发布时间】:2017-10-14 02:16:56
【问题描述】:

我的活动在清单文件中:

android:launchMode="singleTask"

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

intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

这是多余的吗?

这个标志的旁边是什么:

Intent.FLAG_ACTIVITY_SINGLE_TOP

这是多余的吗?

谢谢!

【问题讨论】:

  • 冗余是什么意思?您是否需要知道“singleTask”是否被覆盖?
  • 冗余我的意思是没有必要,因为它已经在清单中定义并且它不会改变任何东西。就像您连续两次将变量设置为相同的值一样。第二次是多余的。

标签: android android-intent android-manifest


【解决方案1】:

1.关于singleTask

来自 Android 开发指南的Application Fundamentals 页面:

默认情况下,一个 应用程序对每个都有亲和力 其他——也就是说,有一个偏好 让他们都属于同一个 任务。

一个“singleInstance”活动代表 单独作为其唯一的活动 任务。如果它开始另一个活动, 该活动将启动为 不同的任务,不管它 启动模式——好像 FLAG_ACTIVITY_NEW_TASK 在 意图。在所有其他方面, “singleInstance”模式等同于 “单一任务”。

如上所述,没有更多 比“singleTask”的一个实例或 “singleInstance”活动,这样 实例预计将处理所有新的 意图。 “单一实例”活动 总是在栈顶 (因为它是唯一的活动 任务),所以它总是可以 处理意图。然而,一个 “singleTask”活动可能会也可能不会 在它上面有其他活动 堆。如果有,则不在 处理意图的位置,以及 意图被放弃。 (尽管 意图被放弃,它的到来将 已经导致任务来到 前景,它将保留在哪里。)

由于任何一种启动模式都不会有超过一个 Activity 实例,因此后退按钮将始终将您带到您的情况下的现有 Activity 实例。

一个重要的区别是“singleTask”不需要在选择某项时为正在启动的新活动创建新任务。它也不必每次都删除后退按钮上的新任务。

由于您的 Activity 堆栈确实都与一个用户“任务”有关,而且听起来您没有一个复杂的 Intent 结构,其中 singleInstance 可能有助于始终处理它们,我建议使用 singleTask 启动模式。

这里有一篇很好的博文,可以了解更多信息,以及图片的功劳:Android Activities and Tasks series – An introduction to Android’s UI component model

2.关于单顶

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

编辑

这不是多余的。

为了记录用户打开的那些activity,记录这些activity打开的顺序,谷歌引入了任务栈的概念,以帮助保持良好的用户体验。

activity的启动模式会影响任务栈。Intent标志也会影响任务栈。

可以在代码中修改任务栈模式,而不用在manifest文件中修改,flags可以直接影响任务栈。

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

【讨论】:

  • 我认为您没有回答我的问题。文档中已经解释了 singleTop, singleInstance ... 的作用。你能回答我的问题而不是谈论单实例吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-05
  • 2015-09-17
  • 2014-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多