图片框架 - 三方库调研

2020-07-03  本文已影响0人  Stan_Z

一、主流图片框架:

Android-Universal-Image-Loader
Picasso
Glide
Fresco

具体图片库介绍参考对应项目文档。

Android-Universal-Image-Loader、Picasso不支持gif图,且项目比较早,目前大部分app会优先考虑使用功能更全面的Glide和Fresco。

二、图片库对比

对比项 Glide Fresco
发布时间 2014年9月 2015年5月
是否支持gif true true
是否支持webP 支持静图,不支持动图 都支持
视频缩略图 true true
大小 500K 2-3M
加载速度
静图(max java heap) 11.1MB 13.9MB
静图(max native heap) 43.8MB 43.8MB
静图(avg wait time) 34ms 44ms
动图(max java heap) 74.8.1MB 36.1MB
动图(max native heap) 66.8MB 545.3MB
动图(avg wait time) 33910ms 15142ms
缓存 内存、磁盘 三级缓存,分别是 Bitmap缓存,未解码图片缓存, 文件缓存。
加载进度 false true

数据参考:https://cloud.tencent.com/developer/article/1385853

整体对比来看,需要考虑的区别有:

1.webP动图支持:

本地webP的动图和静图Glide加载都没问题,但是外链的webP动图,Glide加载不了。

Glide(最新4.11.0版本): 不支持加载外链的webP动图,但是可以参考Fresco写个webpsupport,现在也有类似的三方库,比如:https://github.com/zjupure/GlideWebpDecoder。自测发现确实可以做到。
Fresco本身有webpsupport支持。
这点上来说,两种已经没有太多差异。

2.内存:
动图,max java heap:Glide开销比Fresco大不少。max native heap: Fresco碾压了Glide。java heap确实Fresco开销小点,不容易造成oom,但是native heap太高了,虽然native heap不受虚拟机约束,但是对设备整体内存是有压力的,尤其是像盒子这样的设备,内存也就是1G,小的512M。

Fresco核心功能下沉到了native实现的,因此native heap开销,java heap开销小,但是如果native heap开销如上表数据所示的话,那确实也太大了点,从内存这点上看,我认为Glide至少不会比Fresco差。

3.包大小:
Glide比Fresco更轻量级。Glide能省2M左右的包大小,这个也比较关键。

目前没发现必须Glide切到Fresco的理由,当然也有可能有些点是我没调研到的,欢迎讨论。另外切换成本也比较高,Fresco是基于自定义控件SimpleDraweeView做的,而Glide是基于ImageView,所以改动也会比较大。

上一篇下一篇

猜你喜欢

热点阅读