2017-10-14 79 views
0

我的活动已经在manifest文件:已经在清单中设置Intent.FLAG_ACTIVITY_NEW_TASK是多余的?

android:launchMode="singleTask" 

现在,如果我从我的代码,并使用启动本次活动:

intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 

这是多余的?

什么紧靠此标志:

Intent.FLAG_ACTIVITY_SINGLE_TOP 

这是多余的?

谢谢!

+0

你说冗余是什么意思?你需要知道“singleTask”是否被覆盖或不被覆盖? – azizbekian

+0

冗余我的意思是没有必要,因为它已经在清单中定义,它不会改变任何东西。就像在连续两次将变量设置为相同的值时一样。第二次是多余的。 – Chris

回答

0

1.关于singleTask

Application Fundamentals页的Android开发人员指南:

默认情况下,在 应用程序的所有活动,对其他各 的亲和力 - 这是,他们都有一个首选 属于同一个 任务。

“singleInstance”活动仅代表 作为其 任务中的唯一活动。如果它启动另一个活动,则该活动将被启动到 不同的任务中,而不管其启动模式为 - 好像 FLAG_ACTIVITY_NEW_TASK在 意图中。在所有其他方面, “singleInstance”模式与 “singleTask”相同。

如上所述,从未有更多 比一个“singleTask”或 “singleInstance”活动的情况下,使 实例预计处理所有新 意图。 “单实例”活动 始终位于堆栈顶部 (因为它是 任务中的唯一活动),所以它始终处于处理意图的位置。但是, “singleTask”活动可能会或可能不会 在 堆栈中有其他活动。如果是这样,则不会在 的位置处理该意图,并且 意图被丢弃。 (即使 意图被丢弃,它的到来将 造成任务前来 前景,它将会继续存在。)

因为从来就没有与任何发射活动的多个实例模式下,后退按钮将始终带您到您案例中活动的现有实例。

一个重要的区别是,“singleTask”不需要为选择某项内容的新活动创建新任务。也不必每次都在后退按钮上删除新的任务。由于你的活动堆栈都属于一个用户的“任务”,并且听起来不像你有一个错综复杂的Intent结构,其中singleInstance可能有利于总是处理它们,所以我建议使用singleTask启动模式。

这里是一个很好的博客文章获得更多信息,以及贷记图像:Android Activities and Tasks series – An introduction to Android’s UI component model

2.关于singleTop

如果singleTop模式活动的一个启动的实例中已经存在任务堆栈栈顶,然后在没有创建新实例时重新启动Activity,但是在这种情况下,重新使用堆栈顶部,并且会调用方法的实例将Intent对象传递到此实例中。例如,如果A singleTop的启动模式,一个例子,一个在堆栈的顶部已经存在,则调用startActivity (New Intent (this, A.class)) A开始时,A情况将不会再次创造,而是重新使用原来的实例,并调用原onNewIntent (method)的实例。这是这个任务的堆栈或A. 如果singleTop模式活动的启动已经存在和任务堆栈的例子,但不是在堆栈顶部,那么它的行为和标准相同的模式,还将创建多个实例。你可以看一下understand-android-activity-launchmode

编辑

这不是多余的。

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

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

您可以修改代码的任务堆栈模式没有在清单文件中修改它,和标志可以直接影响任务的堆栈。

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

+1

我不认为你回答我的问题。它已经在文档中解释了singleTop,singleInstance ...的功能。你能回答我的问题,而不是谈论singleInstance吗? – Chris

相关问题