android - 如何清理位图资源

标签 android memory-management memory-leaks 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() 添加到控件 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/

相关文章:

ios - 适用于 iOS 的 Google Maps SDK 不断增加内存使用量

c++ - 这段代码会泄漏内存吗? (引用,新的,但没有删除)

objective-c - 转换到 NSString 后释放 CFStringRef

java - 发布/调试 APK 上是否提供签名配置信息

android - 建立phonegap 1.7。应用程序

android - 有人知道让 AT&T 的无线代理在 45 秒后不超时的方法吗?

ios - 内存泄漏问题

android - 我如何在android中的用户定义方法中使用选定的菜单项值

有关 Instruments 工具的 iOS 问题、我的应用程序中的内存问题

c++ - 为什么泄漏检测不给我行号?