对比一下主流的 Picasso
,Glide
框架的优缺点。主要体现在以下几点:
- 下载图片的方式
- 图片的缓存机制
- 加载到内存的机制
Picasso 和 Glide
Glide
是Google的一位大佬的杰作, 基于 Picasso
,沿袭了 Picasso
的简洁风格,并且在此做了大量的优化与改进。
都是依次按照 内存 > 磁盘 > 网络 的优先级来加载图片。
1.1 缓存 image 格式
将同一张网络图片加载到相同大小的 ImageView中
,Glide
加载的图片质量是不如 Picasso
的
-
Glide
加载图片默认的Bitmap
格式是RGB-565
,一个像素点占32
位 -
Picasso
默认的格式是ARGB-8888
,一个像素点占16
位
所以 Glide
的内存开销要小一半。当然 Glide
也可以通过GlideModule
将 Bitmap
格式转换到 ARGB-8888
。
public class MyGlideModule implements GlideModule {
@Override public void applyOptions(Context context, GlideBuilder builder) {
// Apply options to the builder here.
}
@Override public void registerComponents(Context context, Glide glide) {
// register ModelLoaders here.
}
}
1.2 缓存 image 尺寸
-
Picasso
是将图片下载后会不经压缩直接将图片整个缓存到磁盘中,当需要用到图片时,它会直接返回这张完整大小的图片,并在运行时然后让 GPU
根据 ImageView
的大小来实时重绘, 以作适配。 -
Glide
从指定 URL
地址下载图片后会首先根据 ImageView
的大小适配图片,然后将适配后的图片再存储到磁盘中。具体说来就是:假如在第一个页面有一个 200x200
的ImageView
,在第二个页面有一个 100x100
的 ImageView
,这两个 ImageView
本来是要显示同一张图片,却需要下载两次。
总结:Glide的这种方式优点是加载显示非常快,但同时也需要更大的空间来缓存。
1.3 占用内存
关于加载图片是占用内存,Picasso
几乎是 Glide
的2倍,可以用网上一张图来说明,这个你可以通过 AndroidStudio Monitors
自行查看:
1.4 图片加载的耗时
- 从网上下载图片的话
Picasso
相比 Glide
要快一些。 - 如果直接从磁盘缓存中加载图片的话,Glide 要比 Picasso 快。
可能的原因是 Picasso
下载完图片后直接将整个图片加载进内存,而 Glide
还需要针对每个 ImageView
的大小来适配压缩下载到的图片,这个过程需要耗费一定的时间。(当然我们可以使用 thumbnail() 来减少压缩的时间)
生命周期的问题
Glide
的 with()
方法不光接受 Context
, 还能接收 Activity
和 Fragment
的实例, 这样做的好处是 图片加载会和 Activity/Fragment
的生命周期保持一致,比如 Paused
状态在暂停加载,在 Resumed
的时候又自动重新加载。个人建议传参的时候传递 Activity
和 Fragmen
的实例给 Glide
,而不是Context
。
GIF
Glide
可以加载 GIF
动态图,而 Picasso
不能。而且 Glide
加载动图的时候不需要做特别的配置,正常传入动图的 url
即可,它会自动识别。
库的大小不同
- Picasso
100k
, - Glide
500k
。
单纯这个大小还好,更重要的是 Picasso
和 Glide
的方法个数分别是 840
和 2678
个,这个差距还是很大的,对于 DEX
文件 65535
个方法的限制来说,2678
是一个相当大的数字了,建议在使用Glide
的时候开启 ProGuard
。
Glide
默认的 Bitmap
格式是 RGB_565
,所以占用的内存比较小。在磁盘缓存时,Glide
支持 缓存多种尺寸,这样 Glide
在加载速度上也具有一定的优势,可以根据 View
的大小去加载 图片不用加载全尺寸图片。
除此之外,Glide还支持加载Gif动态图,支持很多自定义样式,比如圆角等等。
结论
Glide
能做到 Picasso
所能做到的一切,两者的区别是 Picasso
比 Glide
体积小很多且图像质量比 Glide
高(但 Glide 可以通过配置修改至一致水平),但 Glide
的速度比 Picasso
更快,Glide
的长处是处理大型的图片流,如 gif
、video
,如果要制作视频类应用,Glide
当为首选。
参考文章
- Android图片加载框架Fresco,Glide,Picasso对比分析