图片加载框架有哪些?他们之间的区别是什么?(这个也是必问的)
-
ImageLoader : 优点: ① 支持下载进度监听; ② 可以在 View 滚动中暂停图片加载; ③ 默认实现多种内存缓存算法这几个图片缓存都可以配置缓存算法,不过 ImageLoader 默认实现了较多缓存算法,如 Size 最大先删除、使用最少先删除、最近最少使用、先进先删除、时间最长先删除等; ④ 支持本地缓存文件名规则定义; 缺点: 缺点在于不支持GIF图片加载, 缓存机制没有和http的缓存很好的结合, 完全是自己的一套缓存机制
Picasso: 优点: ① 自带统计监控功能,支持图片缓存使用的监控,包括缓存命中率、已使用内存大小、节省的流量等。 ② 支持优先级处理 ③ 支持延迟到图片尺寸计算完成加载 ④ 支持飞行模式、并发线程数根据网络类型而变,手机切换到飞行模式或网络类型变换时会自动调整线程池最大并发数。 ⑤ “无”本地缓存。Picasso 自己没有实现本地缓存,而由okhttp 去实现,这样的好处是可以通过请求 Response Header 中的 Cache-Control 及 Expired 控制图片的过期时间。 缺点: 于不支持GIF,默认使用ARGB_8888格式缓存图片,缓存体积大。
Glide: 优点: ① 图片缓存->媒体缓存 ,支持 Gif、WebP、缩略图。甚至是 Video。 ② 支持优先级处理 ③ 与 Activity/Fragment 生命周期一致,支持 trimMemory ④ 支持 okhttp、Volley。Glide 默认通过 UrlConnection 获取数据,可以配合 okhttp 或是 Volley 使用。实际 ImageLoader、Picasso 也都支持 okhttp、Volley。 ⑤ 内存友好,内存缓存更小图片,图片默认使用默认 RGB565 而不是 ARGB888 缺点: 清晰度差,但可以设置
Fresco:
优点:
① 图片存储在安卓系统的匿名共享内存, 而不是虚拟机的堆内存中,所以不会因为图片加载而导致oom, 同时也减少垃圾回收器频繁调用回收Bitmap导致的界面卡顿,性能更高. ② 渐进式加载JPEG图片, 支持图片从模糊到清晰加载 ③ 图片可以以任意的中心点显示在ImageView, 而不仅仅是图片的中心. ④ JPEG图片改变大小也是在native进行的, 不是在虚拟机的堆内存, 同样减少OOM ⑤ 很好的支持GIF图片的显示 缺点: 框架较大, 影响Apk体积,使用较繁琐