5

感谢您按问题阅读,尽管这是一个非常菜鸟...

Android 系统如何管理关于活动初始化的内存,特别是如果一个活动是通过其他活动初始化的?这一直是我脑海中挥之不去的问题,但我将尝试用一个例子来说明:

假设我有 3 个活动 - ABC - 活动A是第一次启动应用程序时启动的活动。现在,假设活动A具有导航到活动BC的按钮,并且这些活动是使用 Android 的startActivity()函数启动的,并传递给它一个Intent实例。同样,假设活动BC具有启动对应活动的按钮......到目前为止有意义吗?

现在,如果我再使用startActivity()to:

  • 从活动A开始活动B
  • 然后从活动B开始活动C
  • 然后从活动C开始活动A
  • 然后无限期地重复上述步骤(所以绕圈子)

...假设Android系统会“知道”活动之前已经开始并且不会重新初始化它们并杀死越来越多的内存,而是调用类似onRestart()功能的东西,而不是“切换”回到已经初始化的活动实例?

一个非常简单的问题/问题的相当解释......如果已经在其他地方提出并回答了这个问题......我无法在其他任何地方找到明确的答案,即使在阅读 Android 开发人员的Android 培训部分时也是如此地点。

4

1 回答 1

7

答案是:视情况而定。:-)

如果您对活动ABC使用标准设置,您的应用程序将耗尽内存。原因是Android会将每个活动保留在“Back Stack”中,允许用户通过按下后退按钮来导航。

但是,如果您在文件中将 Activity 设置为android:launchMode,那么 Android 将通过调用 Activity 将 Intent 路由到正在运行的 Activity 实例。singleTopAndroidManifest.xmlonNewIntent()

您可以在Android 开发者文档中阅读有关启动模式的更多信息。

于 2012-09-16T16:58:46.037 回答