2011-12-05 25 views
3

我看到我的成长堆,我知道它会在任何设备上最终崩溃,因为它只是不断增长。Android的,我看到堆越来越大,但我希望它停止

Grow heap (frag case)

在我的手机上的日志

看到它会崩溃的应用程序在使用32MB。当然,其他的手机将是16MB,如果有任何与运行Android 2.2

现在,很少有资源,我用我的位图recycle(),设置东西向空,从复杂的数据结构弹出项,并使用System.gc()到调用垃圾收集,整个应用程序

但是,堆仍在壮大,它的一个问题...最终

如何正义的力量应用到转储资源,以便使其能够继续运作。

通常总是“位图VM预算”超过,但是我感觉越来越多,我只是没有获得“明确位VM”命令

回答

16

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

  1. 可以拨打回收每个位图,并将它们设置为null。(bitmap.recycle()与relaese该位图使用的所有内存,但不坏的位图对象)。

  2. 您还可以解除与此link中指定的布局关联的drawables

  3. 您可以将您的hashmaps转换为WeakHashmaps。所以当系统内存不足时它的内存会变得更加复杂。

  4. 你可以调整你所有的位图。看看这个l ink.

  5. 可以覆盖在活动onLowMemory()方法时,整个系统运行内存不足它得到一个电话。你可以在那里发布很少的资源。

  6. 你可以使你的对象SoftReferenceWeakreference,以便它们在内存不足的情况下释放。

但真正的事实是,这一切可延缓你的记忆问题/崩溃了,但不能消除它,因为事情是,你必须在某个地方泄露你的活动情境或内存。

+1

堆,当我打电话camera.takePicture,在回调和我的savephoto异步任务之间的增长。我看对什么事都释放了,但什么是真正归结为是,建立在拍摄照片按钮 – CQM

+1

你可能在其他地方泄漏内存。 –

+0

我有一项活动,我将如何泄漏上下文?每一个地方我关闭活动我使用System.exit(0),以真正确保其关闭 – CQM

相关问题