Android OOM问题

鄙人姓胡 2010-10-27 04:26:23
做的项目中用的图片资源比较多,老是报错 “java.lang.OutOfMemoryError: bitmap size exceeds VM budget”

在网上也查了一下,很多人碰到这个问题,

据说是因为资源没有及时释放的缘故

关键代码:
if(!bitmap.isRecycled()){
bitmap.recycle();
}

小弟愚钝,不明白这里bitmap对象是如何管理图片的,图片那么多,是一起管理还是分开管理的
可能问的有点“白”,请各位指教一下!
...全文
989 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
鄙人姓胡 2010-10-29
  • 打赏
  • 举报
回复
没办法,我刚刚转到这个平台,自学了几个月,很多都是碰到问题时查资料学习!

再查资料看一下吧!
DrSmart 2010-10-28
  • 打赏
  • 举报
回复
呵呵,我上面说了弱引用和软引用,但是需要说明的是,模式的不是强引用,强引用即使JVM崩溃了也不会回收的,楼上两位技术不过关啊,哈哈
凉凉二点凉 2010-10-28
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 huweilong1030 的回复:]
WeakReference<Bitmap> bitmap = new WeakReference<Bitmap>(BitmapFactory.decodeFile(path));

这里的path是什么路径,图片的路径吗?

我引用的图片资源都放在程序的 res/drawable-hdpi/ 下面,
通过 mImageButton.setBackgroundDrawable(getRes……
[/Quote]

自己上网找吧,Java里有5种引用,默认强引用
鄙人姓胡 2010-10-28
  • 打赏
  • 举报
回复
WeakReference<Bitmap> bitmap = new WeakReference<Bitmap>(BitmapFactory.decodeFile(path));

这里的path是什么路径,图片的路径吗?

我引用的图片资源都放在程序的 res/drawable-hdpi/ 下面,
通过 mImageButton.setBackgroundDrawable(getResources().getDrawable(R.drawable.help)); 设置一些控件或布局的背景图片

查了一下资料,弱引用好像是C#里的知识,Java里面有嘛?
凉凉二点凉 2010-10-27
  • 打赏
  • 举报
回复
[Quote=引用楼主 huweilong1030 的回复:]
做的项目中用的图片资源比较多,老是报错 “java.lang.OutOfMemoryError: bitmap size exceeds VM budget”

在网上也查了一下,很多人碰到这个问题,

据说是因为资源没有及时释放的缘故

关键代码:
if(!bitmap.isRecycled()){
bitmap.recycle();
}

小弟愚钝,不明白这里bitm……
[/Quote]

这段代码只是告诉虚拟机需要回收该图片,很遗憾,虚拟机不会立即回收。。或者说你不知道他何时回收。
自动回收机制就是这样,,我们没办法手工的去回收资源。。

如上面兄弟说的,使用弱引用会使情况得到改善例,如以下代码:

WeakReference<Bitmap> bitmap = new WeakReference<Bitmap>(BitmapFactory.decodeFile(path));


bitmap.get();
比传统的强引用会较快的回收资源.
有时我们会用异步纯种加载图片子。可以为Gallery或者GridView打一个tag.类似如下:
mGallery.setTag(task);


还有一种,修改android内存限制,这个好像可以。。
DrSmart 2010-10-27
  • 打赏
  • 举报
回复
bitmap的声明周期,感觉jvm而决定的,图片多了可以用弱引用或软引用做临时缓存管理吧

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧