Android 框架如何处理“不保留活动”选项?

How does Android Framework process the option of 'don't keep activities'?

提问人:SnailBird 提问时间:11/16/2023 最后编辑:SnailBird 更新时间:11/21/2023 访问量:38

问:

我知道如何处理应用程序中的“不保留活动”选项。我可以使用和等。onSaveInstanceStateonRestoreInstanceState

在这个问题中,我想知道 Android 框架如何处理该选项。例如。

  1. 当用户将应用程序切换到后台时,我们知道当前的 Activity 将被销毁。但我不知道框架如何做到这一点。我在框架中找不到该过程。我需要你的帮助,在源代码中提供一些关于该过程的线索。
  2. 如果应用程序中只有一个 Activity,并且您将 App 切换到后台,则该 Activity 是否被销毁?当您将 App 从后台切换到前台时,是否会重新创建?你能提供一些源代码吗?ActivityStackActivityStack

感谢您的阅读。也许你可以写点东西。^_^

Android android-activity-activity-lifecycle activity-stack

评论


答:

1赞 David Wasser 11/21/2023 #1

我手头没有源代码,所以不能确定,但我认为它的工作方式就好像您将设置所有活动一样。android:noHistory="true"

你第二个问题的答案是,单曲将被销毁,留下空的。当用户返回到应用程序时,将创建一个新实例,并使用之前保存的 .在这种情况下,操作系统进程可能会被销毁和重新创建,也可能不会被销毁和重新创建,这取决于应用在后台停留了多长时间以及 Android 框架的实现有多激进(这种行为会有所不同,具体取决于设备制造商和设备拥有的资源量)。ActivityActivityStackActivityActivity

评论

0赞 SnailBird 11/22/2023
谢谢大卫。我试试看。 与 不同。如果我有 A、B、C 活动,则设置 B 和 C。路线是A->B->C。在 C 中,我按下 BACK 键,然后我回到 A,而不是 B.B 已经被销毁,而不是重新创建。但会使 B 被重新创建。android:noHistory="true"don't keep acitivitesandroid:noHistory="true"don't keep acitivites
0赞 SnailBird 11/22/2023
所以,它导致了另一个问题。在正常情况下,当 Activity 被销毁时,它将从 ActivityStack 中删除。但是在这种情况下,即使 Activity 被销毁,Android 框架如何将其保留在 ActivityStack 中?因为,当您按 BACK 键时,您可以返回到以前的活动。don't keep acitivites
0赞 David Wasser 11/23/2023
Android 会记住 中的活动。在正常操作中,如果活动堆栈中有 12 个活动,并且您的任务进入后台,并且 Android 会终止操作系统进程,则当用户返回应用时,Android 会创建一个新的操作系统进程,并启动堆栈顶部的新实例。如果用户随后按下 BACK,Android 将创建一个以前位于堆栈顶部的新实例,如果用户继续按 BACK,Android 将创建所有其他活动的新实例,一次创建一个。ActivityStackActivityActivity
0赞 David Wasser 11/23/2023
是的,不保留 Activities 与 的行为不完全匹配是有道理的。对不起。问题是,don't keep Activities 是一种调试辅助工具,用于帮助您在 Android 在某些情况下终止 Activity 时测试应用的行为。但是我需要查看代码才能确切地了解它是如何工作的。android:noHistory="true"