ImageLoader: Universal ImageLoader 是很早开源的图片缓存,在早期被很多应用使用
(1) 多线程下载图片,图片可以来源于网络,文件系统,项目文件夹assets中以及drawable中等。
(2) 支持随意的配置ImageLoader,例如线程池,图片下载器,内存缓存策略,硬盘缓存策略,图片显示选项以及其他的一些配置。
(3) 支持图片的内存缓存,文件系统缓存或者SD卡缓存。
(4) 支持图片下载过程的监听。
(5) 根据控件(ImageView)的大小对Bitmap进行裁剪,减少Bitmap占用过多的内存。
(6) 较好的控制图片的加载过程,例如暂停图片加载,重新开始加载图片,一般使用在ListView,RecycleView,GridView中,滑动过程中暂停加载图片,停止滑动的时候去加载图片。
(7) 提供在较慢的网络下对图片进行加载。
(8) 默认实现多种内存缓存算法 这几个图片缓存都可以配置缓存算法,不过 ImageLoader 默认实现了较多缓存算法,如 Size 最大先删除、使用最少先删除、最近最少使用、先进先删除、时间最长先删除等。
Picasso:Picasso是Square公司开源的一个Android图形缓存库,可以实现图片下载和缓存功能
(1) Picasso已经解决了在adapter中需要取消已经不在视野范围的ImageView图片资源的加载,否则会导致图片错位的问题。
(2) 使用复杂的图片压缩转换来尽可能的减少内存消耗。
(3) 自带内存和硬盘二级缓存功能
Glide: Glide是一个高效、开源、 Android设备上的媒体管理框架,Glide具有获取、解码和展示视频剧照、图片、动画等功能,它还有灵活的API,这些API使开发者能够将Glide应用在几乎任何网络协议栈里。
(1) 图片缓存和媒体缓存,它支持 Gif、WebP、缩略图。甚至是 Video。
(2) 支持优先级处理。
(3) 与 Activity/Fragment 生命周期一致,支持 trimMemory。
(4) 支持 okhttp、Volley 。
(5) 内存缓存更小图片。
Fresco:Fresco 是 Facebook 在2017年上半年开源的图片缓存
(1) 图片存储在安卓系统的匿名共享内存, 而不是虚拟机的堆内存中, 图片的中间缓冲数据也存放在本地堆内存, 所以, 应用程序有更多的内存使用,不会因为图片加载而导致oom, 同时也减少垃圾回收器频繁调用回收Bitmap导致的界面卡顿,性能更高。
(2) 渐进式加载JPEG图片, 支持图片从模糊到清晰加载。
(3) 图片可以以任意的中心点显示在ImageView, 而不仅仅是图片的中心。
(4) JPEG图片改变大小也是在native进行的, 不是在虚拟机的堆内存, 同样减少OOM。
(5) 很好的支持GIF图片的显示。
总结:
Picasso所能实现的功能,Glide都能做,无非是所需的设置不同。但是Picasso体积比起Glide小太多如果项目中网络请求本身用的就是okhttp或者retrofit(本质还是okhttp),那么建议用Picasso,体积会小很多(Square全家桶的干活)。Glide的好处是大型的图片流,比如gif、Video,如果你们是做美拍、爱拍这种视频类应用,建议使用。Fresco在5.0以下的内存优化非常好,代价就是体积也非常的大,按体积算Fresco>Glide>Picasso,不过在使用起来也有些不便。
网友评论