我看到我的堆增长了,我知道它最终会在任何设备上崩溃,因为它会不断增长。
Grow heap (frag case)
在我的手机上它将使用32mb的应用程序崩溃。其他手机当然是16mb,如果有少量资源运行android 2.2
现在,我在我的位图上使用recycle()
,将事物设置为null,从复杂数据结构中弹出项目,并在整个应用程序中使用System.gc()
来调用垃圾回收
但是,堆仍在增长,这是一个问题......最终
如何强制应用转储资源以使其继续运行。
通常总是“位图vm预算”超出,但我感觉越来越多,我只是无法访问“clear bitmap vm”命令
答案 0 :(得分:16)
我在这个问题上也遇到了很多困难。你可以做很多事情。
您可以在每个位图上调用recycle并将它们设置为null。(bitmap.recycle()
具有此位图使用的所有内存,但不会使位图对象无效)。
您还可以取消绑定与此link中指定的布局关联的drawables
。
您可以将hashmaps
转换为WeakHashmaps
。因此当系统内存不足时,它的内存会被重新启动。
您可以调整所有位图的大小。看看这个ink.。
您可以覆盖活动中的onLowMemory()
方法,该方法在整个系统内存不足时接听电话。你可以在那里释放一些资源。
您可以制作对象SoftReference
或Weakreference
,以便在低内存条件下释放它们。
但真正的事实是,所有这些都可以延迟你的内存不足问题/崩溃,但不能消除它,因为事情是你必须在某处泄露你的活动环境或内存。