首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何清理位图资源

如何清理位图资源
EN

Stack Overflow用户
提问于 2011-06-11 01:04:29
回答 2查看 2K关注 0票数 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、System.gs()和在各种地方(如onStop()和onDestroy() )中赋值控制,以及屏幕2上的其他所有东西,都没有用!

问题是,当我第二次浏览屏幕时,从屏幕1转到屏幕2(即再次创建照片预览),我就走出了内存异常。据我了解,上一次位图的引用并没有被清除。

在重定向到屏幕1之前,我该如何杀死它呢?

我注意到一件事。如果我缩小照片的大小,比如说剪裁或者缩小图像的大小在我遇到同样的问题之前。所以基本上它只是需要更长的时间来填补。

我非常感谢这里的一些解决方案,因为这是至关重要的。

EN

回答 2

Stack Overflow用户

发布于 2011-06-11 01:43:33

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

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

票数 2
EN

Stack Overflow用户

发布于 2011-06-11 05:49:46

看看WeakReference是如何使用的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6313424

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档