从A->B导航后,您有 2 个任务:第一个包含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 个不同的任务:如果您长按,您应该会看到 2 个任务。它们可能具有相同的图标(除非您为活动 B 提供了不同的图标),因此您可能无法区分它们。如果您选择包含 A 和 C 的任务,则该任务将被带到最前面,活动 C 位于顶部。如果您现在按 BACK 键,活动 C 将完成,其下的活动将显示活动 A。如果您现在再次按 BACK 键,则活动 A 将完成,您将返回主屏幕。包含 B 的任务仍在最近任务列表中,但它不再在您的其他任务下的任务堆栈中,因为当您按下HOME 按钮时这就像回到零。你重新开始。您没有活动任务,因此所有任务都排成一行,它们不在堆栈中,也没有层次结构。
此外,在您的问题中,您使用“退出应用程序”这个短语。这也不完全正确。按下 BACK 按钮的唯一作用是完成当前活动。如果当前活动是任务中的唯一活动,它也会完成该任务。但是,它不会“退出应用程序”。特别是在您的情况下,因为您的“应用程序”实际上存在于 2 个单独的任务中。
希望这很清楚。