我想问这个之前问过几次的问题。抱歉,如果我要重复,但我不清楚这里的最佳解决方案是什么。
问题是“如何在使用 ImageView 位图资源后清理它,以便我们在内存中没有对它的引用?”。
这是一个例子:
- 屏幕 1 重定向到屏幕 2
- 屏幕 2 包含控件 A(大照片预览)
- 控件 A 包含 ImageView B
- ImageView B 在控件 A 启动时设置
第一次一切正常。控件 A 完成后,我从屏幕 2 重定向到屏幕 1。此时,控件 A 或 ImageView B 或位图的所有引用都应该停止使用。他们不是!!!
我尝试了各种解决方案,包括 bitmap.recycle()、将 finalize() 添加到控件 A、System.gs() 以及在诸如 onStop() 和 onDestroy() 等不同位置的清零控件,以及其他一切那是在屏幕 2 上,没有任何效果!
问题是,当我第二次重新访问屏幕时,从屏幕 1 转到屏幕 2(即再次创建照片预览)时,出现内存不足异常。据我了解,之前位图的引用没有被清除。
如何在重定向回屏幕 1 之前终止它?
我注意到一件事。如果我缩小照片的尺寸,比如裁剪或缩小图像尺寸,一切都会变得很顺利,几次......在我遇到同样的问题之前。所以基本上填满需要更长的时间。
我真的很感激这里的一些解决方案,因为这很关键。
最佳答案
您可能有内存泄漏,此视频可能会帮助您找到问题 Google I/O 2011: Memory management for Android Apps .
注意:3.1 之前的位图存储在 VM 堆内存中,但在 native 内存中,这会导致很多注意泄漏的问题,有关更多信息,请参阅视频
关于android - 如何清理位图资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6313424/