对比一下主流的 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对比分析









