java.lang.OutOfMemoryError:bitmap size exceeds VM budget 如何解决

Android系统会对bitmap内存空间有限制,一般上限为8M,因此在我们进行图片处理操作时,经常会遇到超过上限抛出异常:

java.lang.OutOfMemoryError:bitmap size exceeds VM budget

这是 Bitmap bm = BitmapFactory.decodeFile(path)引起的,Path是sd卡中图片的路径,如果图片过大就会产生错误;
常用的解决方案有:

一、我们可以通过修改采样避免这个问题:
BitmapFactory.Options options=new BitmapFactory.Options();
options.inSampleSize = 10;
Bitmap bmp=BitmapFactory.decodeFile(path,options);

修改采样可以避免这个问题,但是这个inSampleSize该如何确定?1000*1000的图片缩小10倍,可以避免内存溢出;但是本身很小的图片也缩小10倍,并不是我想要的结果。。。。。怎么做可以兼顾?

二、异常捕获,避免程序崩溃

try{

     Bitmap bmp=BitmapFactory.decodeFile(path,options);

}catch (OutOfMemoryError e) {

     // 提示系统,进行内存回收

     System.gc();

    //清除程序缓存

     clearCache();

    //压缩图片重新加载

   reload();           

}

介绍一下图片占用进程的内存算法吧。
android中处理图片的基础类是Bitmap,顾名思义,就是位图。占用内存的算法如下:
图片的width*height*Config。
如果Config设置为ARGB_8888,那么上面的Config就是4。一张480*320的图片占用的内存就是480*320*4 byte。
前面有人说了一下8M的概念,其实是在默认情况下android进程的内存占用量为16M,因为Bitmap他除了java中持有数据外,底层C++的 skia图形库还会持有一个SKBitmap对象,因此一般图片占用内存推荐大小应该不超过8M。这个可以调整,编译源代码时可以设置参数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值