universalImageLoader,picasso,glide,fresco图片选择库选择分析

Posted JackWaiting

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了universalImageLoader,picasso,glide,fresco图片选择库选择分析相关的知识,希望对你有一定的参考价值。

在图片加载这块,picasso,glide,universalImageLoader,fresco 这几个库算是目前做好的四个库了。本博客仅仅作为笔记记录,仅代表个人观点,不对之处,欢迎指出。

​universalImageLoader

一个强大的图片加载库,包含各种各样的配置,最老牌,使用也最广泛。但现在不维护了,比较遗憾。

Picasso

​square公司出品,精品之作,专注与加载高质量图片。

Picasso在加载网络图片方面非常简单粗暴:一行代码

Picasso.with(context) .load(url).resize(100, 100).centerCrop().into(imageView)

总结:使用方便,在图片加载出来的质量会好一些,如果项目中对图片的精度较高的,对图片有特殊要求的且不考虑性能的情况下选用较合适。

Fresco

FackBook推出的,非常强大的一个图片加载库,它能够从网络、本地存储和本地资源中加载图片。而且,为了节省数据和CPU,它拥有三级缓存。

Fresco 中设计有一个叫做 image pipeline 的模块。它负责从网络、本地文件系统,本地资源加载图片。为了最大限度节省空间和CPU时间,它含有3级缓存设计(2级内存,1级文件)。

Fresco 中设计有一个叫做 Drawees 模块,方便地显示loading图,当图片不再显示在屏幕上时,及时地释放内存和空间占用。

特性

内存管理
解压后的图片,即android中的Bitmap,占用大量的内存。大的内存占用势必引发更加频繁的GC。在5.0以下,GC将会显著地引发界面卡顿。

在5.0以下系统,Fresco将图片放到一个特别的内存区域。当然,在图片不显示的时候,占用的内存会自动被释放。这会使得APP更加流畅,减少因图片内存占用而引发的OOM。

Fresco 在低端机器上表现一样出色,你再也不用因图片内存占用而思前想后。

图片的渐进式呈现
渐进式的JPEG图片格式已经流行数年了,渐进式图片格式先呈现大致的图片轮廓,然后随着图片下载的继续,呈现逐渐清晰的图片,这对于移动设备,尤其是慢网络有极大的利好,可带来更好的用户体验。

Android 本身的图片库不支持此格式,但是Fresco支持。使用时,和往常一样,仅仅需要提供一个图片的URI即可,剩下的事情,Fresco会处理。

Glide

Google推荐使用的,并且是由Google在维护,专注于流畅的滚动。

Glide更易用,因为Glide的with方法不光接受Context,还接受Activity 和 Fragment,Context会自动的从他们获取。同时将Activity/Fragment作为with()参数的好处是:图片加载会和Activity/Fragment的生命周期保持一致,比如Paused状态在暂停加载,在Resumed的时候又自动重新加载。

Glide加载的图片质量要差于Picasso,这是因为Glide默认的Bitmap格式是RGB_565,比ARGB_8888格式的内存开销要小一半。

Picasso和Glide在磁盘缓存策略上有很大的不同。Picasso缓存的是全尺寸的,而Glide缓存的是跟ImageView尺寸相同的。Glide的这种方式优点是加载显示非常快。而Picasso的方式则因为需要在显示之前重新调整大小而导致一些延迟。

Glide可以加载GIF动态图,而Picasso不能。

默认使用手机内置存储进行磁盘缓存,可以配置为外部存储,可以配置缓存大小,图片池大小。

默认使用两个线程池来分别执行读取缓存和下载任务,都可以自定义

glide与picasso具体的对比链接

测试

测试了picasso,glide,universalImageLoader,fresco这四个框架,测试内容大概有以下几项,内存测试,大图片测试,小图片测试,本地图片。

简单总结:

1、内存方面,glide,universalImageLoader,fresco很优秀了。picasso有些失望,小图片还好,稍微大一点内存直接翻倍的增长。
2、高于2M左右大图测试中fresco的表现则和picasso显示超过3-5秒,有些出乎意料。
​3、universalImageLoader和glide比较快。项目中如果有图片在线预览功能,前面2者不建议使用了。
4、本地图片的话,四个库基本都OK,没有太大的差异。

综合:

1、glide默认提供配置支持本地图片缓存,缓存的机制是DiskLruCache.可以根据自己的需要,自定义图片缓存的路径.所以在考虑节省用户流量来看可以不考虑picasso;

2、虽然fresco也提供更强大的图片缓存和加载机制,不过在比较之后,感觉fresco还是有待完善,glide可以很简单的获取网络图片的Bitmap对象,而fresco需要通过订阅数据源克隆Bitmap对象的引用才能存储值.操作方式不够简洁和友好.

3、fresco的库文件中,以最新的0.8.1为例,imagepipeline-0.8.1.aar光包得大小就有3.5M ,而glide包的大小为465K为了让Apk包得体积更小,所以考虑使用glide.

最终选择:glide

以上是关于universalImageLoader,picasso,glide,fresco图片选择库选择分析的主要内容,如果未能解决你的问题,请参考以下文章

universalImageLoader,picasso,glide,fresco图片选择库选择分析

UniversalImageLoader的用法总结

使用 universalimageloader 缓存图片的配置类及使用方法

翻翻git之---基于universalimageloader实现的图片加载控件BlurImageView

任务执行失败':app:transformDexArchiveWithExternalLibsDexMergerForDebug'

源码解析 Universal Image Loader