如何清理位图资源

dro*_*ter 5 android memory-leaks memory-management bitmap imageview

我想问这个之前被问过几次的问题。抱歉,如果我重复一遍,但我不清楚这里最好的解决方案是什么。

问题是“如何在使用 ImageView 位图资源后清理它,这样我们就不会在内存中引用它?”。

这是一个例子:

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

第一次一切正常。控件 A 完成后,我从屏幕 2 重定向到屏幕 1。此时,其使用的控件 A 或 ImageView B 或位图的所有引用都应该已失效。他们不是!!!

我尝试过各种解决方案,包括 bitmap.recycle()、将 Finalize() 添加到 Control A、System.gs() 以及在不同位置(例如 onStop() 和 onDestroy())以及屏幕上显示的所有其他内容清空控件2、没有任何作用!

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

如何在重定向回屏幕 1 之前杀死它?

我注意到一件事。如果我通过裁剪或缩小图像尺寸来减小照片的尺寸,一切都会变得顺利,几次......在我遇到同样的问题之前。所以基本上只是需要更长的时间才能充满。

我真的很感激这里的一些解决方案,因为这很关键。

Rav*_*yas 2

您可能存在内存泄漏,此视频可能会帮助您找到问题Google I/O 2011:Android 应用程序的内存管理

注意:3.1 之前的位图存储在 VM 堆内存中,但存储在本机内存中,这会导致在注意到泄漏时出现很多问题,有关更多信息,请参阅视频