【问题标题】:Repeated activity initializations and memory usage重复活动初始化和内存使用
【发布时间】:2012-09-01 19:21:59
【问题描述】:

感谢您通过提问阅读,虽然是一个非常菜鸟...

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

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

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

  • 从活动 A 开始活动 B
  • 然后从活动 B 开始活动 C
  • 然后从活动 C 开始活动 A
  • 然后无限期地重复上述步骤(如此循环)

...假设Android系统会“知道”活动之前已经启动并且不会重新初始化它们并杀死越来越多的内存,而是调用类似@的东西,这是否公平? 987654325@ 功能宁可“切换”回活动的已初始化实例?

一个非常简单的问题/问题的解释......如果已经在其他地方提出并回答了这个问题,我深表歉意......即使在阅读 Android training 部分时,我也无法在其他任何地方找到明确的答案在 Android 开发者网站上。

【问题讨论】:

    标签: android memory android-activity


    【解决方案1】:

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

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

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

    您可以在Android Developer Documentation 中阅读有关启动模式的更多信息。

    【讨论】:

    • 感谢 Nicholas 提供的信息,非常感谢!我将对您的建议进行一些调查,并希望很快得到一些反馈!
    • 看起来正是我想要的……再次感谢! :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-23
    • 2019-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-30
    相关资源
    最近更新 更多