我看到我的堆在增长,我知道它最终会在任何设备上崩溃,因为它一直在增长。
Grow heap (frag case)
在整个日志中都可以看到

在我的手机上,它会在使用 32mb 时使应用程序崩溃。其他手机当然是 16mb,如果有那么少的资源可以运行 android 2.2

现在,我在我的位图上使用 recycle(),将事物设置为 null,从复杂的数据结构中弹出项目,并在整个应用程序中使用 System.gc() 调用垃圾收集

但是,堆仍在增长,这是一个问题......最终

我如何强制应用程序转储资源以便它可以继续运行。

通常总是超出“位图虚拟机预算”,但我越来越觉得我无法访问“清除位图虚拟机”命令

最佳答案

我也在这个问题上挣扎了很多。你可以做很多事情。

  • 您可以在每个位图上调用 recycle 并将它们设置为 null。( bitmap.recycle() 与释放此位图使用的所有内存,但不会使位图对象无效)。
  • 您还可以取消绑定(bind)与此 link 中指定的布局关联的 drawables
  • 您可以将您的 hashmaps 转换为 WeakHashmaps 。以便在系统内存不足时释放其内存。
  • 您可以调整所有位图的大小。看看这个 l ink.
  • 您可以覆盖 Activity 中的 onLowMemory() 方法,当整个系统内存不足时,该方法会收到调用。你可以在那里释放很少的资源。
  • 您可以将对象设为 SoftReferenceWeakreference ,以便它们在内存不足的情况下被释放。

  • 但真正的事实是,所有这些都可以延迟您的内存不足问题/崩溃,但无法消除它,因为您必须在某处泄漏您的 Activity 上下文或内存。

    关于Android,我看到堆在增长,但我希望它停止,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8381617/

    10-09 01:44