近来看了一下妹纸.gank.io这个开源项目,相见恨晚。
https://github.com/drakeet/Meizhi
其中用到很多当今主流的开源框架,UI:Material Design & ButterKnife, 网络:RxJava & Retrofit,图片:Glide & Picasso。
初学者啊,纳闷Gilde和Picasso不都是加载图片的嘛,而且代码几乎都一样,为啥用两套呢?接下来 Glide vs Picasso。
1.加载:
Glide:
compile 'com.github.bumptech.glide:glide:3.7.0'
Picasso
compile 'com.squareup.picasso:picasso:2.5.2'
2.库的大小和方法的数
对比两个.jar 库的大小,Glide 要比 Picasso 大很多,基本上是 Picasso 的3.5倍。从库的大小,我们就可以预见,Glide 的方法必然是要大于Picasso 的,Picasso 的方法 总共有849个,而 Glide 的有2678个。
3.缓存方面
Glide先下载图片,然后改变图片的大小,以适应 imageView 的要求,然后缓存到本地。 所以如果你是下载同一张图片,但是设定两个不一样大小的 imageView, 那么Glide 实际上是会缓存两份。
Picasso则是完全不一样的做法,先下载图片然后缓存完整的大小到本地,比如说图片的大小是1080p的,之后如果我需要同一张图片,就会返回这张 full size 的,如果我需要resize,也是对这种 full size 的做 resize。
换个角度来看,这里不仅仅是缓存的问题,比如一个 ImageView 要改变它的大小,PIcasso 就只需要下载一次 full size 的图片,但是 Glide 实际上就不仅仅是下载一次了,它需要去单独下载然后改变大小适配 imageView,因为对于 Glide 来讲,需要缓存不同大小的同一张图片。
4.内存使用
Glide 默认是用的 RGB_555 的设定,Picasso 则是用的 ARGB _8888的设定。Picasso 是缓存的 full size 图片的大小,而 Glide 是加载已经改变大小后的图片,显而易见使用的memory会小很多。 这样可以减少 OutOfMemoryError 的可能性。
5.加载时间
Glide的这种方式优点是加载显示非常快。而Picasso的方式则因为需要在显示之前重新调整大小而导致一些延迟。
6.图片质量
Picasso加载的图片质量普遍优于Glide,这个自己没看出来,不过有大神做过测试,确实如此。这应该是app中使用图片浏览器时用Glide,而加载单张图片时用Picasso的一个重要原因吧。
7.比较蛋疼的一点
Glide可以加载GIF动态图,而Picasso不能。
总结:
Glide和Picasso各有优点,Glide加载图像以及磁盘缓存的方式都要优于Picasso,速度更快,并且Glide更有利于减少
OutOfMemoryError的发生,GIF动画是Glide的杀手锏。Picasso的图片质量更高。
大神们的建议是:如果使用Glide,将Bitmap格式换成 ARGB_8888、让Glide缓存同时缓存全尺寸和改变尺寸两种。