已经在清单中设置Intent.FLAG_ACTIVITY_NEW_TASK是多余的?
我的活动已经在manifest文件:已经在清单中设置Intent.FLAG_ACTIVITY_NEW_TASK是多余的?
android:launchMode="singleTask"
现在,如果我从我的代码,并使用启动本次活动:
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
这是多余的?
什么紧靠此标志:
Intent.FLAG_ACTIVITY_SINGLE_TOP
这是多余的?
谢谢!
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代码中。
我不认为你回答我的问题。它已经在文档中解释了singleTop,singleInstance ...的功能。你能回答我的问题,而不是谈论singleInstance吗? – Chris
你说冗余是什么意思?你需要知道“singleTask”是否被覆盖或不被覆盖? – azizbekian
冗余我的意思是没有必要,因为它已经在清单中定义,它不会改变任何东西。就像在连续两次将变量设置为相同的值时一样。第二次是多余的。 – Chris