设置 launchMode = “ singleTask”与设置 activity launchMode = “ singleTop”

我有一个非常分层的应用程序(活动类似于联盟 > 球队 > 位置 > 球员) ,所以我把每个活动 singleTop,以保持导航明智,并防止重复实例。

现在我正在做我的第二个应用程序,我已经看到它建议声明我的应用程序为 singleTask,以防止重复的实例。有人能解释一下每种方法的优点吗?

我的新应用程序只是一个活动的3个片段,然后我可能会添加一个设置活动,也许是一个常见问题。

编辑: 我刚刚意识到 singleTask并没有像我想的那样阻止我的应用程序的重复实例。现在正在寻找正确的方法来处理这件事。

61526 次浏览

我认为你对 singleTop 和 singleTask 的定义有点偏差。SingleTop 可以生成一个重复的实例。让我们用你的例子,联赛 > 球队 > 位置 > 球员。如果在球员界面中有一个按钮,它会把你带到联盟界面,它会变成联盟 > 球队 > 位置 > 球员 > 联盟。

而 singleTask 保证活动只能存在一个实例。

我在这里找到了答案: Http://www.intridea.com/blog/2011/6/16/android-understanding-activity-launchmode

“ singleTop”:

与“标准”的不同之处在于,如果当前任务顶部已经存在一个活动实例,并且系统将意图路由到该活动,则不会创建新实例,因为它将启动一个 onNewInent ()方法,而不是创建一个新对象。让我们以 Twitter-oauth 集成为例。

“ singleTask”:

将始终创建一个新任务,并将一个新实例作为根实例推送到该任务。但是,如果任何任务中存在任何活动实例,系统将通过 onNewInent ()方法调用将意图路由到该活动实例。在这种模式下,可以将活动实例推送到相同的任务。如果用户单击 singleTask 活动的 BACK 键,系统将把用户返回到前一个活动。

Android 活动启动模式

四种模式。

  1. “标准”
  2. “ single Top”
  3. “单任务”
  4. “ singleInstance”

默认模式是 “标准”

这些模式分为两类。标准单人秀在一边,SingleTaskSingleInstance在另一边。

标准和 单人秀之间的主要区别在于标准,每当标准活动有新的意图时,就会创建一个新的实例。对于 单人秀,也会创建一个新实例,但是该活动的一个实例已经位于堆栈的顶部,它不会创建一个新实例。

实际上,当我们从服务器上下载一个应用程序并启动它,然后从服务器上打开它时,问题就出现了。启动应用程序后,按主页按钮。然后单击所有程序,并从主屏幕上选择应用程序的图标。然后,在标准的情况下将创建另一个活动,但是在 singleTop 中,不会创建新的实例。

SingleTask”和“ SingleInstance”模式也只在一个方面有所不同:

SingleTask”活动允许其他活动成为其任务的一部分。它位于活动堆栈的根部,但是可以将其他活动(必然是“标准”和“ singleTop”活动)启动到同一个任务中。

另一方面,“ SingleInstance”活动不允许其他活动成为其任务的一部分。这是任务中唯一的活动。如果它启动另一个活动,该活动将被分配给不同的任务ーー就好像 FLAG _ ACTIVITY _ NEW _ TASK 在意图中一样。

Http://smartandroidians.blogspot.in/2010/04/activity-launch-mode-in-android.html

来自 了解活动启动模式:

标准(默认) :-活动类的多个实例可以是 可以将实例化的实例和多个实例添加到同一任务或 这是大部分活动的共同模式。

SingleTop:-与标准的区别在于,如果 活动已经存在于当前任务和系统的顶部 将意图路由到此活动,则不会创建新实例 因为它将启动一个 onNewInent ()方法,而不是创建一个 新物件。

SingleTask:-将始终创建一个新任务,并创建一个新实例 被作为根目录推送到任务。但是,如果任何活动实例 存在于任何任务中,系统将意图路由到该活动 在这种模式下,活动 实例可以推送到相同的任务。这种模式对于 作为入口点的活动。

SingleInstance:-与 singleTask 相同,除了 no 活动 实例的相同任务。 因此,具有启动模式的活动总是在单个 活动实例任务。这是一个非常专业的模式,应该 只能在完全作为一个整体实现的应用程序中使用 活动。