我想问几次之前被问过的这个问题。对不起,如果我正在重新尝试,但我不清楚这里最好的解决方案是什么。
问题是“如何在使用后清理ImageView位图资源,因此我们在内存中没有对它的引用?”。
以下是一个例子:
第一次一切正常。一旦控制A完成,我将从屏幕2重定向到屏幕1.此时,控制A或ImageView B或其使用的位图的所有引用都应该是死的。他们不是!!!
我尝试了各种解决方案,包括bitmap.recycle(),将finalize()添加到Control A,System.gs()和variouse位置(如onStop()和onDestroy()以及其他所有内容中的归零控件)在屏幕2上,没有任何作用!
问题是当我第二次再次访问屏幕时,从屏幕1到屏幕2(即再次创建照片预览)我出现内存异常。据我所知,前一个位图的引用没有被清除。
在重定向回屏幕1之前如何杀死它?
我注意到了一件事。如果我缩小照片的尺寸,比如裁剪或制作较小尺寸的图像,一切顺利,很少次......在我遇到同样的问题之前。所以基本上只需要更长的时间来填满。
我非常感谢这里有一些解决方案,因为这很关键。
答案 0 :(得分:2)
您可能有内存泄漏,此视频可能会帮助您找到问题Google I/O 2011: Memory management for Android Apps。
注意:3.1之前的位图存储在VM堆内存中但存储在本机内存中,这会导致注意到泄漏时出现很多问题,有关详细信息,请参阅视频
答案 1 :(得分:0)
了解WeakReference的使用方式。