Android,我看到堆增长,但我希望它停止

时间:2011-12-05 06:11:52

标签: android garbage-collection heap

我看到我的堆增长了,我知道它最终会在任何设备上崩溃,因为它会不断增长。

Grow heap (frag case)

整个日志中都可以看到

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

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

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

如何强制应用转储资源以使其继续运行。

通常总是“位图vm预算”超出,但我感觉越来越多,我只是无法访问“clear bitmap vm”命令

1 个答案:

答案 0 :(得分:16)

我在这个问题上也遇到了很多困难。你可以做很多事情。

  1. 您可以在每个位图上调用recycle并将它们设置为null。(bitmap.recycle()具有此位图使用的所有内存,但不会使位图对象无效)。

  2. 您还可以取消绑定与此link中指定的布局关联的drawables

  3. 您可以将hashmaps转换为WeakHashmaps。因此当系统内存不足时,它的内存会被重新启动。

  4. 您可以调整所有位图的大小。看看这个ink.

  5. 您可以覆盖活动中的onLowMemory()方法,该方法在整个系统内存不足时接听电话。你可以在那里释放一些资源。

  6. 您可以制作对象SoftReferenceWeakreference,以便在低内存条件下释放它们。

  7. 但真正的事实是,所有这些都可以延迟你的内存不足问题/崩溃,但不能消除它,因为事情是你必须在某处泄露你的活动环境或内存。