38

我有一个非常层级化的应用程序(活动类似于League> Team> Position> Player),所以我已经完成了每个活动singleTop保持导航明智并防止重复的情况。设置launchMode =“singleTask”vs设置activity launchMode =“singleTop”

现在我正在制作第二个应用程序,并且我看到它建议声明我的应用程序为singleTask以防止重复的实例。有人可以帮助解释每种方法的优点吗?

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

编辑:我刚刚意识到,singleTask是不是阻止我的应用程序的重复实例,因为我曾想过。现在寻找正确的方式来处理这...

回答

53

我认为你的singleTop和singleTask的定义是有点关闭。 SingleTop可以产生一个重复的实例。让我们使用你的例子,League> Team> Position> Player。如果玩家屏幕上有一个按钮可以进入联盟屏幕,它将成为联赛>球队>位置>球员>联盟。

而singleTask保证只有一个活动实例可以存在。

+0

我怀疑我没有完全理解他们的定义。感谢您的澄清。我的主要目标是在用户进入联赛>队伍>位置时处理,然后最小化并重新加入应用程序,该应用程序正在加载联赛而不是位置。通过声明SingleTop,我的应用程序现在总是加载我离开的地方。不知道为什么singleTask不这样做。 – NSouth 2014-09-11 20:11:02

+0

@你有没有发现为什么singletask没有这样做呢? – batmaci 2017-07-13 00:40:26

13

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

“singleTop”:

从“标准”不同的是,如果活动的实例已经存在于当前任务和系统的顶部路由意图到这个活动,没有新的实例将被创建,因为它会触发一个onNewIntent()方法,而不是创建一个新的对象。我们以Twitter-oauth集成为例。

“singleTask”:

一个新的任务总是会创建一个新的实例将被推到任务的根本之一。但是,如果任何活动实例存在于任何任务中,则系统通过onNewIntent()方法调用将意图路由到该活动实例。在这种模式下,活动实例可以推送到同一个任务。如果用户从singleTask活动中单击BACK键,则系统会将用户返回到上一个活动。

19

Android的活动launchMode

4种模式...

“标准” “singleTop” “singleTask” “singleInstance”

默认模式为 “标准”。这些模式分为两组。标准和singleTop进入一方,singleTask和singleInstance进入另一侧。

标准和singleTop之间的主要区别在于标准,每当标准活动有新的意图时,就创建一个新的实例。在singleTop的情况下,创建一个新实例,但活动的一个实例已经在堆栈顶部,它不会创建一个新实例。

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

“singleTask”和“singleInstance”模式在一个方面也各不相同:“singleTask”活动允许其他活动成为其任务的一部分。它是活动堆栈的根源,但其他活动(必须是“标准”活动和“单一活动”活动)可以启动到同一个任务中。另一方面,“单一实例”活动不允许其他活动成为其任务的一部分。这是该任务中唯一的活动。如果它启动另一个活动,那么该活动将分配给其他任务 - 就好像FLAG_ACTIVITY_NEW_TASK在意图中一样。

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

5

Understanding Activity launch mode

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

singleTop: - 从标准不同的是,如果 活动的一个实例,在当前任务和系统 路线的意图,本次活动的顶部已经存在,没有新的实例将被创建 ,因为它会发起一个onNewIntent()方法,而不是创建一个新对象 。

singleTask: - 总是会创建一个新的任务,并且一个新的实例将 作为根推送到任务。但是,如果任何任务中存在任何活动实例 ,系统将通过onNewIntent()方法调用将该意向路由到该活动 实例。在这种模式下,活动 实例可以推送到相同的任务。该模式对于充当入口点的 活动很有用。

singleInstance: - 与singleTask相同,只是可以将no活动 实例推送到singleInstance的相同任务中。 因此,具有启动模式的活动始终在单个 活动实例任务中。这是一种非常专业化的模式,并且只应在完全作为一个 活动实施的应用程序中使用 。

相关问题