Android:启动模式'单实例'

Pra*_*avy 14 android android-activity

我正在浏览单个实例的文档,并尝试了几个样本.在我的一个示例中,我有三个活动:A-> B-> C,其中B 在清单中有android:launchMode ="singleInstance".活动A和C具有默认启动模式.

场景:

通过A和B导航到C(即A-> B-> C)后,从活动C按下后退按钮进入活动A(C-> A),但从活动A按下后退按钮不退出应用程序,而是将活动B置于前面,然后按活动B的后退按钮退出应用程序.

当从活动A按下后退按钮时,为什么活动B会到达前景?

其他情况:

类似于,如果用户按下设备主页按钮,则从活动C开始,并通过长按主页回来应用程序,C保持在前台.但后退按钮流程需要C-> A - >退出应用程序.这次活动B没有出现.

Dav*_*ser 29

从导航后A-> B,你有两个任务:第一个包含一个,第二个包含.B位于顶部,A位于顶部.

现在当从B-> C导航时,Android将活动C启动到包含A的任务(它无法将其启动到包含B的任务中,因为B被定义为"singleInstance",因此它将其启动到具有相同"taskAffinity"的任务中,在这种情况下,任务包含A).为此,Android将包含A的任务带到了前面.现在你有2个任务:前面包含A和C的任务,第二个包含B的任务.

现在按下BACK键,完成活动C并返回到任务下面的活动,即C.你还有2个任务:前面有一个C,下面有一个B.

现在再次按BACK键.这将完成活动A(从而完成持有A的任务)并将任务堆栈中的上一个任务带到前面,即包含B的任务.您现在有1个任务:包含B的任务.

在您的其他场景中,从A-> B-> C导航后,您将从2个任务开始:前面包含A和C的任务,以及第二个包含B的任务.

现在按HOME按钮.你现在说你"长按"回到应用程序".这不完全正确.你不能"回到应用程序".你只能"回到任务".但是你有两个不同的任务:如果长按,你应该看到2个任务.它们可能具有相同的图标(除非您为活动B提供了不同的图标),因此您可能无法区分它们.如果您选择包含A和C的任务,那么该任务将被带到前面,活动C位于顶部.如果现在按BACK键,活动C将完成,其下的活动将显示活动A. 如果您现在再次按BACK键,活动A将完成,您将返回到HOME屏幕.包含B的任务仍在最近任务列表中,但在其他任务下不再位于任务堆栈中,因为当您按下HOME按钮时这就像回到零.你重新开始.您没有活动任务,因此所有任务都在一行中,它们不在堆栈中且没有层次结构.

此外,在您的问题中,您使用短语"退出应用程序".这也不太正确.BACK按钮按下的唯一功能是完成当前活动.如果当前活动是任务中的唯一活动,则它也会完成该任务.但是,它并没有"退出应用程序".特别是在你的情况下,因为你的"app"实际上存在于2个独立的任务中.

希望这很清楚.