上篇我们讨论了涉及数据结构的选取,单例模式中的内存泄漏,handler中的内存泄漏以及一些细微的可以增加android性能的方法。本篇继续讨论android性能的优化。
5、图片优化
对于图片,内存优化中有两个手段:
一是减少图片本身所占的内存;
二是缓存经常使用的图片,避免重复创建文件,增加内存的开支。
图片有很多种格式,常见的主要有jpeg(有损压缩),png(无损压缩),gif,bmp,webp,在既保证图片质量又要限制图片的大小的情况下,webp是首选。但是大多数app搭建界面时几乎都是png格式,所以我们经常需要对png进行压缩。
5.1 对png进行压缩
imageOptim
无损的压缩工具,不牺牲图片质量的前提下,既减小了png图片占用的空间,又提高了加载速度。
png/jpeg转换为webp
如果是4.0以上的系统,那么直接使用系统提供的能力来支持webp,如果是4.0以下的系统,也可以通过在app中集成第三方函数库,比如webp-android-backport来实现。
尽量使用.9.png
5.2 bitmap图片处理
缓存
图片缓存方案一般有两级,分别是内存缓存和磁盘缓存,可以使用图片加载和缓存库。
picasso,Glide,Fresco等。
设置压缩尺寸
使用BitmapFactory.Options设置inSampleSize, 这样做可以减少对系统资源的要求。
BitmapFactory.Options bitmapFactoryOptions = new BitmapFactory.Options();
bitmapFactoryOptions.inSampleSize = 2;
Bitmap bmp = BitmapFactory.decodeFile(sourceBitmap, options);
设置图片像素属性:
Android中图片有四种属性,分别是:
ALPHA_8:每个像素占用1byte内存
ARGB_4444:每个像素占用2byte内存
ARGB_8888:每个像素占用4byte内存 (默认)
RGB_565:每个像素占用2byte内存
Android默认的颜色模式为ARGB_8888,这个颜色模式色彩最细腻,显示质量最高。但同样的,占用的内存也最大。 所以在对图片效果不是特别高的情况下使用 RGB_565(565没有透明度属性)
opt.inPreferredConfig = Bitmap.Config.RGB_565;
图片回收
bitmap在不使用的时候要调用Bitmap.recycle()进行回收。