粗谈android图片框架优缺点:Glide、picasso、Fresco、ULM
Glide
- 优点:
1.多样化媒体加载
Glide 不仅是一个图片缓存,它支持 Gif、WebP、缩略图。甚至是 Video
2.生命周期集成
通过设置绑定生命周期,我们可以更加高效的使用Glide提供的方式进行绑定,这样可以更好的让加载图片的请求的生命周期动态管理起来
3.高效的缓存策略
A. 支持Memory和Disk图片缓存
B. Picasso 只会缓存原始尺寸的图片,而 Glide 缓存的是多种规格,也就意味着 Glide 会根据你 ImageView 的大小来缓存相应大小的图片尺寸
C. 内存开销小
默认的 Bitmap 格式是 RGB_565 格式,而 Picasso 默认的是 ARGB_8888 格式,这个内存开销要小一半。
4.Android关于图片内存计算,共有四种,分别是:
1.ALPHA_8:每个像素占用1byte内存
2.ARGB_4444:每个像素占用2byte内存
3.ARGB_8888:每个像素占用4byte内存(默认,色彩最细腻=显示质量最高=占用的内存也最大)
4.RGB_565:每个像素占用2byte内存(8bit = 1byte) - 缺点:
- 网络加载性能比较差, 网络不好时,加载速度慢;
- 加载GIF图片消耗内存交大;
- 包比较大;
Picasso
- 优点:
1.Picasso是全尺寸下载图片;
2.Picasso默认的缓存格式为ARGB_888;
3.链式调用,使用简单;使用比较简单,一行代码就可以加载图片并显示
4.具有一般图片框架的基础功能;
5.方便的图片转换;(图片高斯模糊,添加圆角,做度灰处理,圆形图片);
6.加载过程监听和错误处理;
7.自动添加磁盘和内存二级缓存;
8.支持多种数据源加载;
9.框架体积小 - 缺点:
1.Picasso默认不支持Gif图片加载。Picasso库很小,类也很少。
2.缓存的图片是没有缩放的,并且默认使用ARGB_8888格式缓存图片,缓存体积较大;
Fresco
- 优点:
1.内存自动回收。图片不可见时,会及时自动释放所占用的内存,尽可能地避免OOM ;
2.三级缓存机制。两级内存缓存(解码的与未解码的)+一级磁盘缓存,提升加载速度,节省内存占用空间 ;
3.支持各种加载场景。如动图加载,高斯模糊等常见的图片加载场景。另外还提供了独特的渐进式加载,先加载小图再加载大图,加载进度等功能(很强大) ;
4.可以显示动画GIF图片和WebP; - 缺点:
- 侵入性较强,必须使用官方提供的SimpleDraweeView代替ImageView加载图片;
- 框架比较大,造成Apk体积变大;
- 操作步骤比较繁琐;
ULM
- 优点:
1.最早开源的图片缓存框架,比较稳定,加载速度适中;
2.支持下载进度监听; - 缺点:
- 不支持GIF图片加载;
- 使用比较繁琐,缓存机制和http的缓存机制结合不好;
- 已经不再更新了;