我正在查看单个实例的文档,并尝试了几个示例。在我的一个示例中,我有三个活动: A->B->C,其中B的清单中有android:launchMode="singleInstance“。活动A和C具有默认的启动模式。
场景:
在通过A和B导航到C(即A->B->C)后,从活动C按回按钮到活动A (C->A),但是活动A的后退按钮按压不会退出应用程序,而是将活动B放在前面,然后从活动B按后退按钮退出应用程序。
问题
为什么当按下活动A的后退按钮时,活动B就会出现在前台?
其他场景:
来自Activity的Similarliy,如果用户按下device按钮,然后通过long Home按下返回应用程序,C将保持在前台。但后退按钮按流采用C-> A ->退出应用程序。这一次活动B没有出现在前台。
发布于 2013-06-27 10:50:19
从A->B导航后,有两个任务:第一个任务包含A,第二个任务包含B。B在上面,A在那下面。
现在,当从B->C导航时,Android将活动C启动到包含A的任务中(它不能将其启动到包含B的任务中,因为B被定义为"singleInstance",,因此它启动到具有相同"taskAffinity",的任务--在本例中是包含A的任务)。为了做到这一点,Android把包含A的任务带到了最前面。现在有两个任务:前面包含A和C的任务,后面包含B的任务。
现在按后退键,它完成了活动C并返回到任务下面的活动,即C。您仍然有两个任务:前面包含C的任务和在任务下面包含B的任务。
现在你再按下后键。这样就完成了活动A(从而完成了保持A的任务),并将任务堆栈中的前一个任务带到了前面,即包含B的任务,您现在有一个任务:包含B的任务。
在其他场景中,在从A->B->C导航之后,您将从两个任务开始:前面包含A和C的任务,后面包含B的任务。
现在你按下主页按钮。你现在说你的“通过长按压回到应用程序”。这不是完全正确的。你不能“回到应用程序”。你只能“回到任务”。但是你有两个不同的任务:如果你做一个长新闻,你应该看到这两个任务。它们可能有相同的图标(除非您为活动B提供了不同的图标),所以您可能无法区分它们。如果您选择包含A和C的任务,则该任务将被带到前面,活动C位于顶部。如果你现在按下后退键,活动C将完成,下面的活动将显示活动A。如果您现在再次按后退键,活动A将完成,您将返回到主屏幕。包含B的任务仍然在最近的任务列表中,但是它不再在其他任务下的任务堆栈中,因为当您按下HOME按钮时,它就像回到零。你重新开始。您没有活动任务,因此所有任务都在一行中,它们不在堆栈中,也没有层次结构。
此外,在您的问题中,您使用了短语“退出应用程序”。这也不太正确。后退按钮所做的唯一的事情就是完成当前的活动。如果当前活动是任务中的唯一活动,它也会完成该任务。然而,它并没有“退出应用程序”。特别是在你的情况下,因为你的“应用程序”实际上存在于两个不同的任务中。
希望这是清楚的。
发布于 2013-06-26 23:55:57
来自文档
https://stackoverflow.com/questions/17337536
复制