singleTop
,以使导航合理且防止重复实例。现在我正在制作我的第二个应用程序,并看到建议将应用程序声明为singleTask
以防止重复实例。有人能帮忙解释一下两种方法的优点吗?我的新应用程序只是具有3个片段的活动,然后我可能会添加设置活动和常见问题解答。编辑:我刚意识到singleTask
并没有像我想象的那样防止我的应用程序重复实例。现在正在寻找正确的处理方法...singleTop
,以使导航合理且防止重复实例。现在我正在制作我的第二个应用程序,并看到建议将应用程序声明为singleTask
以防止重复实例。有人能帮忙解释一下两种方法的优点吗?我的新应用程序只是具有3个片段的活动,然后我可能会添加设置活动和常见问题解答。编辑:我刚意识到singleTask
并没有像我想象的那样防止我的应用程序重复实例。现在正在寻找正确的处理方法...我认为你对singleTop和singleTask的定义有些偏差。singleTop可能会产生重复的实例。让我们以你的例子为例,联赛>球队>位置>球员。如果在球员屏幕上有一个按钮可以带您到联赛屏幕,那么它将变成联赛>球队>位置>球员>联赛。
而singleTask保证该活动只能存在一个实例。
Android活动启动模式
有四种模式...
默认模式为"standard"标准模式。
这些模式可分为两组。 standard和singleTop在一组, singleTask和singleInstance在另一组中。
standard和singleTop的主要区别在于,在标准模式下,每次为标准活动新建意图时都会创建一个新实例。对于singleTop,也会创建一个新实例,但是如果该活动的实例已经在堆栈的顶部,则不会创建新实例。
实际上,当我们从服务器下载应用程序并打开它时,就会出现问题。打开应用程序后,按Home键。然后点击所有程序并从主屏幕选择应用程序的图标。此时,标准模式下将创建另一个活动,但在单一顶部模式下,不会创建新实例。
“singleTask” 和 “singleInstance” 两种模式之间也只有一个区别:
“singleTask”活动允许其他活动成为其任务的一部分。它位于活动堆栈的底部,但其他活动(必须是“standard”和“singleTop”活动)可以被启动到同一任务中。
“singleInstance” 活动则不允许其他活动成为其任务的一部分。它是任务中唯一的活动。如果它启动了另一个活动,则该活动将被分配到一个不同的任务中——就像使用FLAG_ACTIVITY_NEW_TASK标志一样。
我在这里找到了答案: http://www.intridea.com/blog/2011/6/16/android-understanding-activity-launchmode
"singleTop":
与“standard”不同的是,如果当前任务栈中已经存在一个活动实例并且系统将意图路由到该活动实例,则不会创建新实例,而是会触发 onNewIntent() 方法。让我们以 Twitter-oauth 集成为例。
"singleTask":
将始终创建一个新任务,并将新实例推入任务作为根实例。但是,如果在任何任务中存在任何活动实例,则系统通过 onNewIntent() 方法调用将意图路由到该活动实例。在此模式下,活动实例可以推入同一任务。如果用户从 singleTask 活动按 BACK 键,则系统将返回用户到上一个活动。
standard (默认):可以实例化该活动类的多个实例,并且多个实例可以添加到同一个任务或不同的任务中。这是大多数活动的常见模式。
singleTop:与standard的区别在于,如果活动的一个实例已经存在于当前任务的顶部并且系统将intent路由到该活动,则不会创建新的实例,因为它将触发onNewIntent()方法而不是创建新对象。
singleTask:将始终创建一个新任务,并将新实例推送到任务作为根。但是,如果任何活动实例存在于任何任务中,则系统通过onNewIntent()方法调用将intent路由到该活动实例。在此模式下,活动实例可以推送到同一任务中。此模式对于充当入口点的活动非常有用。
singleInstance:与singleTask相同,只是没有活动实例可以推送到单个实例任务的同一任务中。因此,具有启动模式的活动始终位于单个活动实例任务中。这是一种非常专业的模式,应仅在完全作为一个活动实现的应用程序中使用。