设置launchMode ="singleTask"vs设置活动launchMode ="singleTop"

NSo*_*uth 53 android android-manifest android-activity android-navigation

我有一个非常分层的应用程序(活动类似于League> Team> Position> Player)所以我已经完成了每个活动singleTop,以保持导航合理并防止重复实例.

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

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

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

小智 70

我认为你对singleTop和singleTask的定义有点偏.SingleTop可以生成一个重复的实例.让我们使用你的例子,League> Team> Position> Player.如果播放器屏幕中有一个按钮可以进入联赛屏幕,它将成为联盟>团队>位置>玩家>联盟.

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


Sel*_*lva 27

Android活动launchMode

4种模式......

"standard""singleTop""singleTask""singleInstance"

默认模式为"标准".

模式分为两组.标准和singleTop在一侧,singleTask和singleInstance在另一侧.

标准和singleTop之间的主要区别在于标准,每次创建标准活动的新意图时,都会创建一个新实例.如果是singleTop,则会创建一个新实例,但活动的实例已经位于堆栈的顶部,它不会创建新实例.

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

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

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


M.H*_*fny 15

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

"singleTop":

与"标准"的区别在于,如果活动实例已存在于当前任务的顶部且系统路由意图此活动,则不会创建新实例,因为它将触发onNewIntent()方法而不是创建新对象.我们以Twitter-oauth集成为例.

"singleTask":

将始终创建一个新任务,并将新实例作为根任务推送到任务.但是,如果任何任务中存在任何活动实例,系统会通过onNewIntent()方法调用将意图路由到该活动实例.在此模式下,活动实例可以推送到同一任务.如果用户从singleTask活动中单击BACK键,系统将使用户返回上一个活动.


小智 5

了解活动启动模式:

standard(默认值): - 可以实例化活动类的多个实例,并可以将多个实例添加到同一任务或不同任务.这是大多数活动的共同模式.

singleTop: - 与标准的区别在于,如果活动的实例已经存在于当前任务的顶部,并且系统将意图路由到此活动,则不会创建新实例,因为它将触发onNewIntent()方法而不是创建一个新对象.

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

singleInstance: - 与singleTask相同,只是no活动实例可以推送到singleInstance的同一任务中.因此,启动模式下的活动始终位于单个活动实例任务中.这是一种非常专业的模式,只能在完全作为一个活动实现的应用程序中使用.