singleTask和singleInstance的区别

52

你应该尝试这个线程:https://dev59.com/rXA75IYBdhLWcg3wlqAT - Snicolas
是的,我也读过那个。 - Mick
2
我之前在这个主题上进行了一个实验(包括视频动画),也请看一下这个链接 - https://angrybyte.me/post/156362879355/android-tasks-and-back-stack - milosmns
3个回答

56

docs有什么不清楚的地方吗?

"singleTask"和"singleInstance"模式在一个方面上有所不同: "singleTask"活动允许其他活动成为其任务的一部分。它始终位于其任务的根部,但其他活动(必须是“standard”和“singleTop”活动)可以被启动到该任务中。另一方面,“singleInstance”活动不允许其他活动成为其任务的一部分。它是任务中唯一的活动。如果它启动另一个活动,则该活动将被分配给另一个任务-就像FLAG_ACTIVITY_NEW_TASK在意图中一样。


5
针对singleTask情况下,它允许在同一任务栈中存在其他活动;而对于singleInstance情况,它不允许在同一任务栈中存在其他活动,对吗? - Mick
你知道我在评论中提出的问题的答案吗? - Mick
为什么 singleInstance 要为自己保留一个 Stack - Mick
不,每个活动都属于一个堆栈。但是两个活动可以属于同一个堆栈。类比:每个印度人都属于一个部落,但一个部落可以容纳多个印度人。 - Snicolas
@Mick 当涉及到 singleTask 时,它基本上是一对多的,任务对活动;当涉及到 singleInstance 时,它是一对一的,任务对活动。 - Tamim Attafi
显示剩余2条评论

36

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

singleInstance:- 与singleTask相同,除了不能将任何活动实例推送到singleInstance的同一任务中。因此,具有启动模式的活动总是在单个活动实例任务中。这是一种非常专业化的模式,应仅在完全作为一个活动实现的应用程序中使用。


7
简洁明了的解释。谢谢! - Tash Pemhiwa

8

SingleInstance类似于单例模式,其堆栈就像无法被扩展的final类。它在堆栈中始终是唯一的,并且总是存在。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接