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

发布时间:2019-08-06 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了Android开发之大图片内存溢出优化脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

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

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);

脚本宝典总结

以上是脚本宝典为你收集整理的Android开发之大图片内存溢出优化全部内容,希望文章能够帮你解决Android开发之大图片内存溢出优化所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。