资讯专栏INFORMATION COLUMN

Android开发之大图片内存溢出优化

yibinnn / 511人阅读

摘要:缩放加载加载大图片使用大图片时可能出现的异常在下采用来表示颜色每个像素占图片手机宽缩放高缩放需要考虑的问题动态获取图片的分辨率动态获取手机分辨率实现步骤获取手机屏幕的宽和高获取图片的宽和高创建的配置参数设置的值为此时方法并不会去真正

缩放加载加载大图片(使用大图片时可能出现的异常)

09-14 00:59:51.813: E/AndroidRuntime(2128): Caused by: java.lang.OutOfMemoryError
09-14 00:59:51.813: E/dalvikvm-heap(2128): Out of memory on a 30720012-byte allocation.
在Android下采用ARGB来表示颜色 每个像素占4byte

PS:
图片:2400*3200
手机:320*480
宽缩放: 7
高缩放: 6
需要考虑的问题 :(1)动态获取图片的分辨率 (2)动态获取手机分辨率

实现步骤

(1)获取手机屏幕的宽和高

WindowManager windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
Display display = windowManager.getDefaultDisplay();
int screenWidth = display.getWidth();
int screenHeight = display.getHeight();
(2)获取图片的宽和高

//创建BitmapFactor的配置参数
BitmapFactory.Options options = new Options();
//设置options的inustDecodeBounds值为true
options.inJustDecodeBounds = true;
//此时BitmapFactory.decode方法并不会去真正加载图片,但是可以返回图片的一些信息(如宽和高)
BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher, options);
//根据options的配置信息获取图片的宽和高
int imgWidth = options.outWidth;
int imgHeight = options.outHeight;
(3)计算缩放比
int scale = 1;//默认的缩放比
int scaleX = imgWidth/screenWidth;//图片宽的缩放比
int scaleY = imgHeight/screenHeight;//图片高的缩放比
if(scaleX>scaleY && scaleX>scale){
//当宽的缩放比大于高的缩放比,并且缩放比大于默认缩放比时,将宽的缩放比赋给默认缩放比
scale = scaleX;
}else if(scaleY>scaleX && scaleY>scale){
   scale = scaleY;
}
(4)按照缩放比显示图片 

 //options.inSampleSize = scale;//根据inSampleSize(采样率)来进行缩放,当inSampleSize为2时,图片缩放为原图大小的1/4;
 //设置options.inJustDecodeBounds值为false,即开始真正加载图片
 options.inJustDecodeBounds = false;
 Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher, options);
 iv.setImageBitmap(bitmap);

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/66421.html

相关文章

  • 内存 问题- 收藏集 - 掘金

    摘要:然而,中依然有可能发生内存泄漏。所以你的安卓快速定位解决内存泄漏掘金昨天是个好日子,程序员的节日,在这里给所有的程序员送上一份迟到的祝福。应用内存泄漏的定位分析与解决策略掘金,大家好,我是。 Android 性能优化之巧用软引用与弱引用优化内存使用 - Android - 掘金前言: 从事Android开发的同学都知道移动设备的内存使用是非常敏感的话题,今天我们来看下如何使用软引用与弱...

    TIGERB 评论0 收藏0
  • 2019最新Android面试题

    摘要:若拦截事件返回为,表示拦截,事件不会向下层的或者传递,表示不拦截,继续分发事件。五注册反注册未成对使用引起的内存泄漏。七集合对象没有及时清理引起的内存泄漏。 原文链接:https://blog.csdn.net/wen_hah... 版权声明:本文为博主原创文章,转载请附上博文链接! 前言 金三银四到来了,找工作的好时候到了,小伙伴们是不是都在忙着找工作呢,小弟前一阵也是忙着在找工作,...

    plus2047 评论0 收藏0
  • 记一次惊心动魄的前端性能优化之旅

    摘要:方案未引起重视,并没有做出相应处理。页面中元素的布局是相对的,因此一个元素的布局发生变化,会联动地引发其他元素的布局发生变化。这里可以使用的和来分析的性能。写在最后性能优化是一门做减法的艺术。 欢迎一起交流 欢迎关注我的个人公众号,不定期更新自己的工作心得。showImg(https://segmentfault.com/img/bVEk23?w=258&h=258); 正文从这里开始...

    Bryan 评论0 收藏0

发表评论

0条评论

yibinnn

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<