如何清理位图资源

4

我想问一个之前已经问过几次的问题。如果我重复了,很抱歉,但是对于什么是最佳解决方案,我并不清楚。

问题是“如何在使用ImageView位图资源后清除它,以便我们在内存中没有引用?”

以下是例子:

  1. 屏幕1重定向到屏幕2
  2. 屏幕2包含控件A(大照片的预览)
  3. 控件A包含ImageView B
  4. 当启动控件A时设置ImageView B

第一次运行时一切正常。一旦控件A完成,我就从屏幕2重定向到屏幕1。此时,所有与控件A或ImageView B或其正在使用的位图相关的引用都应该失效。他们没有!!!

我尝试了各种解决方案,包括bitmap.recycle(),将finalize()添加到Control A中,System.gs()和在onStop()和onDestroy()等各种地方将控件置空,以及屏幕2上的其他所有内容,但都无济于事!

问题在于,当我第二次访问屏幕时,即从屏幕1转到屏幕2时(即再次创建照片预览时),我会收到内存不足异常。我的理解是,之前位图的引用没有被清除。

在重定向回屏幕1之前,如何将其删除?

我注意到一件事。如果我通过裁剪或制作图像的较小尺寸来减小照片的大小,一切都很顺利,几次后...我遇到了同样的问题。因此,它只需要更长的时间才能填满。

我真的很希望能够提供一些解决方案,因为这很关键。


你尝试将你的ImageView设为null了吗? - Andro Selva
2个回答

2

你可能有内存泄漏问题,这个视频可能会帮助你找到问题的所在:Google I/O 2011:Android应用内存管理

注意:在3.1版本之前,位图存储在VM堆内存中,但存储在本地内存中会导致很多泄漏问题,如需进一步了解,请参考视频。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接