Android-bitmap OOM问题,如何回收相应内存

发布于 2017-03-02 20:11:14 字数 152 浏览 1310 评论 3

inflate一个layout,在这个layout中有背景图,
有button,button有背景图,有imageView,有gridView,gridView有一个背景图,在gridView中有button,button也有背景图,
请问,如何释放这些图片占用的内存?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

瑾兮 2017-07-23 04:36:30

XML布局中加载的图片是不用GC的,
他们是和View/Activity 绑定在一起,同生同死。

UI上加载的可以使用SoftReference让虚拟机进行快速回收。
如果迫切需要手动回收,严格控制内存开销,也许就该针对场景写Cache的管理了。

对于一般的场景,使用栈的结构就足够了,对于期望高效流畅又有着复杂item的ListView的话
可能需要预加载和手动回收。

期待你在给出详细应用场景后进行详细讨论。

瑾兮 2017-07-03 03:36:57

我觉得只有你在代码里面创建过bitmap对象才需要回收,如果通过xml文件的属性比如src去配置应该不需要自己去回收。

update:
bitmap是object,当然是堆对象,不可能是堆栈对象。
如果你说的情况确实是通过xml属性设置背景图,应该不会涉及到bitmap对象,更不会涉及到自己去回收。一个app这么多图片,每个都自己回收这还不完蛋了?这是framework内部自己处理的事情,内部是不是用bitmap对象,如果是怎么用怎么回收不是应用层考虑的事情。

偏爱自由 2017-05-12 20:10:04

if(!bitmap.isRecycled()){//先判断图片是否已释放了
bitmap.recycle();
}

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文