图片这东西,就是OOM怪兽,内存杀手,不好好处理,OOM玩一样。
在项目的优化过程中,无论在性能优化上,还是在内存优化上,图片都是占了很大的一部分。
网上有很多各种各样对于图片的优化方式,结合自己实际的使用情况,总结了一下。
压缩图片资源:
PNG资源可以使用「熊猫 TinyPng」对PNG进行压缩,之前在游戏公司的时候,压缩图片也有请熊猫哥帮忙,神器之一。
也可以看看google的开源图像算法工具「Guetzli」对图片进行压缩,号称在相同的「感受画质」下,可以缩小文件达 35%。
也可以参考下图:
根据图片的类型和作用,可以使用JPG替代PNG资源。PNG解码速度比JPG快,PNG质量比JPG好,JPG还少了个透明度通道,但是JPG体积比PNG小啊。当你在使用一些多颜色的大图片时,可以考虑使用JPG去替代PNG。
除了PNG和JPG,还可以考虑更佳的图片格式,如WebP(参考「WebP 探寻之路」),BPG。
压缩图片加载:
对图片大小进行压缩,大部分情况下,你并不需要使用原图这么大的图片。根据具体需要,如屏幕尺寸,ImageView的尺寸等,对原始图片的尺寸缩放加载。
选择图片的色彩模式,很多时候,你基本是不需要使用透明度通道的,使用RGB565能帮你节省一半内存。根据实际的需求,可以使用RGB565去替代ARGB_8888。
可以参考 「RGB_8888、ARGB_4444、RGB_565、ALPHA_8深入分析及常见误区纠正」。
根据
内存优化:
使用Bitmap Pool对Bitmap进行复用。要注意的是,Bitmap的复用是有一定的要求,google粑粑已经给出了相关的方案 「Managing Bitmap Memory」 (需要科学上网)。
可以对Bitmap主动回收,当然,这里会有些坑,google也不推选让你手动回收,而是交给GC自己处理。
使用框架:
~~「什么轮子都不如我的CV」~~ 是的,作为程序员,你需要轮子。
Picasso:由Square开源的图片加载缓存库,JakeWharton大神的作品。
Glide:google推选的一个图片框架,我主要是用的就是Glide啦。
Fresco:FaceBook出品的图片加载库,具有以下优特点:
1.「FaceBook出品,必属精品」,套用到上面两家也是没毛病;
2.更佳的内存管理,更好地避免OOM;
3.更大的体积!由于维护了一块特殊的native内存,使其有更佳的内存占用,但是对应问题是体积增大没毛病;
4.加载网络图片,好像内存占用比另外两者要大;
Fresco还提供了以上三种框架的对比APP Comparsion,可以下载自行测试。
如对你有帮助,欢迎点赞喜欢支持
网友评论