【问题标题】:OnTrimMemory, but no Garbage Collection on AndroidOnTrimMemory,但在 Android 上没有垃圾收集
【发布时间】:2016-06-23 19:11:51
【问题描述】:

在 Android 中,我正确地收到了 onTrimMemory 调用,并且我做出了适当的反应。当 UI 隐藏时,我会释放保存的 UI 元素并将内存使用量降低 50%。

我遇到的问题是 Android 系统在每次 onTrimMemory 调用后都没有运行垃圾收集器。我可以在 logcat 中看到这一点。所以我会得到一些 onTrimMemory(CRITICAL) 调用,然后最终我的后台进程将被终止。但是,如果我使用 Android Studio 手动发起 GC,应用程序将释放 50% 的内存回系统,大大增加了它的生存机会。

我可以添加一些 System.GC 调用,但我不知道 Android 如何/为什么会不断告诉我释放内存,但拒绝运行垃圾收集器。 (我仍然需要测试更多设备,因为我想知道这是否是特定于设备的问题。)

【问题讨论】:

    标签: android memory-management garbage-collection


    【解决方案1】:

    为什么不对非关键资源使用 Wea​​kReference?

    【讨论】:

    • 我这样做。问题不是内存泄漏。问题是尽管系统知道内存不足,但垃圾收集器并未运行。如果垃圾收集器没有运行,WeakReference 资源将不会被清理。
    【解决方案2】:

    这似乎是特定手机的问题。我无法在 Nexus 设备上重现这一点。我的 Nexus 设备在我释放对象的 onTrimMemory 调用之后执行垃圾收集器传递。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-18
      • 2011-10-12
      • 1970-01-01
      相关资源
      最近更新 更多