安卓 - 性能 - 图片

作者: 七零八落问号 | 来源:发表于2017-04-26 15:38 被阅读86次

    图片这东西,就是OOM怪兽,内存杀手,不好好处理,OOM玩一样。
    在项目的优化过程中,无论在性能优化上,还是在内存优化上,图片都是占了很大的一部分。
    网上有很多各种各样对于图片的优化方式,结合自己实际的使用情况,总结了一下。

    压缩图片资源:

    PNG资源可以使用「熊猫 TinyPng」对PNG进行压缩,之前在游戏公司的时候,压缩图片也有请熊猫哥帮忙,神器之一。
    也可以看看google的开源图像算法工具「Guetzli」对图片进行压缩,号称在相同的「感受画质」下,可以缩小文件达 35%。
    也可以参考下图:

    各种png压缩工具

    根据图片的类型和作用,可以使用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,可以下载自行测试。

    如对你有帮助,欢迎点赞喜欢支持

    相关文章

      网友评论

        本文标题:安卓 - 性能 - 图片

        本文链接:https://www.haomeiwen.com/subject/bhyizttx.html