资源描述:
《android 图片加载性能优化总结》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、Android图片加载性能优化总结一、AndroidBitmap加载大尺寸图片优化: 压缩原因:1.imageview大小如果是200*300那么加载个2000*3000的图片到内存中显然是浪费可耻滴行为;2.最重要的是图片过大时直接加载原图会造成OOM异常(outofmemory内存溢出)所以一般对于大图我们需要进行下压缩处理看不懂英文的话木有关系,本篇会有介绍主要处理思路是:1.获取图片的像素宽高(不加载图片至内存中,所以不会占用资源)2.计算需要压缩的比例3.按将图片用计算出的比例压缩,并加载至内存中使用官网大图片加载教程(上面网址里的)对应代码就是:/***获取压缩后
2、的图片* @param res* @param resId* @param reqWidth 所需图片压缩尺寸最小宽度* @param reqHeight 所需图片压缩尺寸最小高度* @return*/public static BitmapdecodeSampledBitmapFromResource(Resourcesres, int resId,int reqWidth, int reqHeight){ //首先不加载图片,仅获取图片尺寸 final BitmapFactory.Optionsoptions= new Bitmap
3、Factory.Options(); //当inJustDecodeBounds设为true时,不会加载图片仅获取图片尺寸信息 options.inJustDecodeBounds = true; //此时仅会将图片信息会保存至options对象内,decode方法不会返回bitmap对象 BitmapFactory.decodeResource(res,resId,options); //计算压缩比例,如inSampleSize=4时,图片会压缩成原图的1/4 options.inSampleSize = calculateInSampleSize(opt
4、ions,reqWidth,reqHeight); //当inJustDecodeBounds设为false时,BitmapFactory.decode...就会返回图片对象了 options. inJustDecodeBounds = false; //利用计算的比例值获取压缩后的图片对象 return BitmapFactory.decodeResource(res,resId,options);}代码详解:核心方法是BitmapFactory.decode...(....,options)...的意思是此外还有一系列的decodeFile/decodeSt
5、ream等等方法,都是利用options灵活解析获取图片,只不过解析图片的来源不同罢了,比如网络图片获取,一般就是解析字节流信息然后decode获取图片实例Options是图片配置信息,参数详细介绍下:inJustDecodeBounds 是否只解析边界 设为true时去decode获取图片,只会加载像素宽高信息 设为false时decode则会完全加载图片inSampleSize 压缩比例 比如原图200*300,如果值是2时会压缩成100*150;是4则图片压缩成50*75最好是2的幂数,比如24816.....outHeight 图片原高度outWid
6、th 图片原宽度其他参数自行研究,这里暂时只用到这几个decodeSampledBitmapFromResource方法内的三段代码对应上面的三步流程难点在于中间那步,压缩比例的计算,官网同样提供了个calculateInSampleSize方法其中reqWidth和reqHeight是所需图片限定最小宽高值/***计算压缩比例值* @param options 解析图片的配置信息* @param reqWidth 所需图片压缩尺寸最小宽度* @param reqHeight 所需图片压缩尺寸最小高度* @return*/public sta
7、tic int calculateInSampleSize(BitmapFactory.Optionsoptions,int reqWidth, int reqHeight){ //保存图片原宽高值 final int height=options. outHeight; final int width=options. outWidth; //初始化压缩比例为1 int inSampleSize=1; //当图片宽高值任何一个大于所需压缩图片宽高值时,进