前言:
四大图片缓存基本信息
image.png一、 ImageLoader 网络加载框架
地址:https://github.com/nostra13/Android-Universal-Image-Loader
(1)优点:
- 支持本地缓存文件名规则定义;
- 默认实现多种内存算法;
- 避免内存泄漏在可以 View 滚动的时候暂停;
(2)缺点:
- 配置相当麻烦;
- 作者已经停止更新;
二、 Glide 网络加载框架
地址:https://github.com/bumptech/glide
(1)优点:
- 支持优先级处理;
- 不仅支持静态图片还支持 Gif 图片、缩略图和 WebP;
- 不单可以缓存图片,还可以缓存媒体;
(2)缺点:
- 加载 Gif 图片时,如果最后一帧为透明,会出现闪烁的情况;
- Glide 使用的时候消耗内存比较严重;
三、 Fresco 网络加载框架
地址:https://github.com/facebook/fresco
(1)优点:
- 内存的管理;
- Fresco 与 Glide 同样支持优先级处理;
- 图片预览,渐进式显示效果和多图请求;
- 两个内存缓存加上 Native 缓存构成了三级缓存
- 支持流式,可以类似网页上模糊渐进式显示图片
- 对多帧动画图片支持更好,如Gif 和 WebP图片;
(2)缺点:
- Fresco 比较重量级,如果引入会明显增大项目;
- Fresco 的注入性比较强;
四、 Picasso 网络加载框架
地址1:http://square.github.io/picasso/
地址2:https://github.com/square/picasso
(1)优点:
- Picasso采用的 ARGB-8888,加载的是全图,图片质量和清晰度要比 Glide 要高;
- Glide 是在 Picasso 的基础上进行第二次封装;
(2)缺点:
- 采样率过高,导致出现 OOM 异常的概率要比 Glide 高很多;
- 不能加载 Gif 图片;
- 缓存策略和加载速度明显不足;
五、开发建议:
方法数量: Fresco > Glide > ImageLoader
流畅度分析:Glide ≈ Fresco > ImageLoader
按体积进行比较:Fresco > Glide > Picasso
-
Glide 和 Picasso 都是非常完美的库。Glide 加载图像以及磁盘缓存的方式都要优于 Picasso,速度更快,并且 Glide 更有利于减少 OutOfMemoryError 的发生,GIF 动画是 Glide 的杀手锏。不过Picasso 的图片质量更高。如果使用 Glide,建议将 Bitmap 格式换成 ARGB_8888、让 Glide 缓存同时缓存全尺寸和改变尺寸两种。
-
Picasso 所能实现的功能 Glide 都能做到,只是所需设置不同。两者的区别是 Picasso 比 Glide 体积小很多且图像质量比 Glide 高,但Glide 的速度比 Picasso 更快,Glide 的长处是处理大型的图片流,如 gif、video,如果要制作视频类应用,Glide 当为首选。
-
Fresco 可以说是综合了之前图片加载库的优点,其在5.0以下的内存优化非常好,但它的不足是体积太大,按体积进行比较:Fresco>Glide>Picasso,所以 Fresco 在图片较多的应用中更能凸显其价值,如果应用没有太多图片需求,不推荐使用 Fresco。
六、其它问题:
1. 什么是三级缓存?
- 内存缓存:优先加载,速度最快;
- 本地缓存:次优先加载,速度快;
- 网络缓存:最后加载,速度慢;
2. 为什么要进行三级缓存?
- 减少不必要的流量消耗;
- 加载很慢,影响用户体验;
- OOM 导致的频繁 GC;
3. 三级缓存原理:
- 首次加载的时候通过网络加载,获取图片,然后保存到内存和 SD 卡中;
- 之后运行 APP 时,优先访问内存中的图片缓存;
- 如果内存没有,则加载本地 SD 卡中的图片;
网友评论