上篇我们讨论了涉及数据结构的选取,单例模式中的内存泄漏,handler中的内存泄漏以及一些细微的可以增加android性能的方法。本篇继续讨论android性能的优化。
对于图片,内存优化中有两个手段: 一是减少图片本身所占的内存; 二是缓存经常使用的图片,避免重复创建文件,增加内存的开支。 图片有很多种格式,常见的主要有jpeg(有损压缩),png(无损压缩),gif,bmp,webp,在既保证图片质量又要限制图片的大小的情况下,webp是首选。但是大多数app搭建界面时几乎都是png格式,所以我们经常需要对png进行压缩。
无损的压缩工具,不牺牲图片质量的前提下,既减小了png图片占用的空间,又提高了加载速度。
如果是4.0以上的系统,那么直接使用系统提供的能力来支持webp,如果是4.0以下的系统,也可以通过在app中集成第三方函数库,比如webp-android-backport来实现。
图片缓存方案一般有两级,分别是内存缓存和磁盘缓存,可以使用图片加载和缓存库。 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()进行回收。
新闻热点
疑难解答