美文网首页
加载图片产生的OOM

加载图片产生的OOM

作者: 任天一 | 来源:发表于2017-06-26 15:05 被阅读33次

一、为什么加载大图片时会产生OutOfMemoryError?

       这是因为Android采用图片格式是ARGB-->这里A代表透明度、R是红色、Green是绿色、Blue是蓝色。

       加载图片时之所以产生的OOM是因为图片占用不存超出了系统的规范,一般我们用屏幕的分辨率比如720*1080系统分配分内存为32m,而一个图片分辨率3120*4208占用的内存为3120*4208*4=52515840即53m,这样的话系统肯定会oom

二、解决OOM:

       <1>、获取屏幕的大小:

WindowManager wm = (WindowManager)getSystemService(WINDOW_SERVICE);

//int width = wm.getDefaultDisPlay().getWidth;

//int height= wm.getDefaultDisPlay().getHeight;

Point point = new Point();

wm.getDefaultDisplay().getSize(point);

int width = point.x;

int height = point.y;

//两种区别:第二种版本14以上包括14才能使用

       <2>、获取图片的大小:

//BitMapFactory.decodeFile(xx,xxx);

//第一个参数代表图片路径,第二个参数代表你设置的options

Options options = new Options();

options.inJustDecodeBounds=true;//不会把图片加到内存,但是会获取图片的信息,核心采用的是Native这里不多讲

BitMap  bitmap =  BitMapFactory.decodeFile(file.getAbsPath(),options);

int imgWidth = options.outWidth;

int imgHeight = options.outHeight;

       <3>、计算缩放比例:

int scaleX = imgWidth/width;

int scaleY = imgHeight/height;

int scale = scaleX>scaleY?scaleX:scaleY

       <4>、获取缩小后的图片:

options.inJustDecodeBounds = false;//因为之前设置了图片不能加载到内存,这里需要重新更改能加载到内存。

options.inSampleSize = scale;

BitMap  bitmap =  BitMapFactory.decodeFile(file.getAbsPath(),options);

       <5>、显示图片:

img.setImageBitmap(bitmap);

//原来一个图片分辨率3120*4208占用的内存为3120*4208*4=52515840即53m,这样的话系统肯定会oom

bitmap.getByCount();

//现在打印出结果图片占用内存3282240/1024/720=3m,这样就能避免oom。

相关文章

  • 加载图片产生的OOM

    一、为什么加载大图片时会产生OutOfMemoryError? 这是因为Android采用图片格式是ARGB...

  • Android工具类之图片加载第三方封装缓存优化

    一、OOM的原因OOM:所谓的OOM指的就是Out-of-Memory内存不足啦。Android上加载图片OOM无...

  • Android工具类之图片加载第三方封装缓存优化

    一、OOM的原因 OOM:所谓的OOM指的就是Out-of-Memory内存不足啦。Android上加载图片OOM...

  • 性能优化

    问题:setImageResource()造成卡顿和oom解决方案:使用图片加载框架Glide加载图片

  • Android大尺寸图片加载问题

    对于大尺寸图片加载,如何正常加载显示且不发生OOM? 图片采样,应用场景:图片全部显示在控件上 图片按区域加载,应...

  • Glide

    Glide常用: ////原生加载,图片过大,OOM异常 使用Glide加载 Glide 1.简介 Glide,一...

  • 解决图片加载oom

    几个知识点 方案一: 读取图片时注意方法的调用,适当压缩 方案二:在适当的时候及时回收图片占用的内存通常Activ...

  • android图片压缩避免OOM

    简单吹下牛:很多app都会要加载图片,但是如果不压缩图片就很容易OOM, 个人看来OOM 出现原因总的来说分为两种...

  • 用BitmapFactory.decodeStream()方法计

    在学习图片加载时图片很大的时候直接加载到内存或则直接原图绘制到 ImageView中会导致OOM问题; 解决思路是...

  • Glide

    Glide常用: //原生加载,图片过大,OOM异常 使用Glide加载 Glide 1.简介 Glide,一个被...

网友评论

      本文标题:加载图片产生的OOM

      本文链接:https://www.haomeiwen.com/subject/qcfjcxtx.html