0
点赞
收藏
分享

微信扫一扫

Android 图片加载框架 (一)

云岭逸人 2022-09-13 阅读 242


对比一下主流的 ​​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​​ 自行查看:

Android 图片加载框架 (一)_ide

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对比分析​​


举报

相关推荐

0 条评论