前言
上文已经对当今Android主流的图片加载库进行了全面介绍 & 对比
如果你还没阅读,我建议你先移步这里进行查看
今天我们来学习一下其中一个Android主流的图片加载库的使用 - Glide
目录
1. 简介
- 介绍:Glide,是Android中一个图片加载开源库
Google的开源项目
- 主要作用:实现图片加载
2. 功能特点
2.1 功能列表
- 从上面可以看出,Glide不仅实现了图片异步加载的功能,还解决了Android中加载图片时需要解决的一些常见问题
- 接下来,我会对Glide的每个功能点进行详细的介绍
2.2 功能介绍
2.2.1 关于图片加载
- 图片的异步加载(基础功能)
|
|
- 设置加载尺寸
- 1Glide.with(this).load(imageUrl).override(800, 800).into(imageView);
设置加载中以及加载失败图片
api里面对placeholder()、error()函数中有多态实现,用的时候可以具体的熟悉一下
|
|
- 设置加载动画
- 1Glide.with(this).load(imageUrl).animate(R.anim.item_alpha_in).into(imageView);
api也提供了几个常用的动画:比如crossFade()
R.anim.item_alpha_in
|
|
- 设置要加载的内容
项目中有很多需要先下载图片然后再做一些合成的功能,比如项目中出现的图文混排,该如何实现目标下
|
|
2.2.2 多样式的媒体加载
|
|
2.2.3 关于缓存
- 设置磁盘缓存策略
|
|
- 设置跳过内存缓存
|
|
- 清理缓存
|
|
2.2.4 其他设置
- 生命周期集成
通过设置绑定生命周期,我们可以更加高效的使用Glide提供的方式进行绑定,这样可以更好的让加载图片的请求的生命周期动态管理起来
|
|
注意:
- 传入的context类型影响到Glide加载图片的优化程度
- Glide可以监视Activity的生命周期,在Activity销毁的时候自动取消等待中的请求。但是如果你使用Application context,你就失去了这种优化效果。
设置动态转换
1Glide.with(this).load(imageUrl).centerCrop().into(imageView);设置下载优先级
1Glide.with(this).load(imageUrl).priority(Priority.NORMAL).into(imageView);
3. Demo实例
没有Demo的代码讲解不是好文章,让我们来一步步学会使用Glide。
步骤1:在gradle添加依赖
|
|
步骤2:添加网络权限
|
|
步骤1和步骤2是Glide使用的前提,千万别忘了!!!!
步骤3:在MainActivity中
|
|
还有具体其他功能需要配置的自己按照我上面写的进行配置就好了~
这里再贴上Glide的Github地址:请点击这里
4. 特点
4.1 优点
多样化媒体加载
Glide 不仅是一个图片缓存,它支持 Gif、WebP、缩略图。甚至是 Video生命周期集成
通过设置绑定生命周期,我们可以更加高效的使用Glide提供的方式进行绑定,这样可以更好的让加载图片的请求的生命周期动态管理起来高效的缓存策略
A. 支持Memory和Disk图片缓存
B. Picasso 只会缓存原始尺寸的图片,而 Glide 缓存的是多种规格,也就意味着 Glide 会根据你 ImageView 的大小来缓存相应大小的图片尺寸比如你 ImageView 大小是200200,原图是 400400 ,而使用 Glide 就会缓存 200200 规格的图,而 Picasso 只会缓存 400400 规格的。这个改进就会导致 Glide 比 Picasso 加载的速度要快,毕竟少了每次裁剪重新渲染的过程,非常灵活 & 加载速度快
C. 内存开销小
默认的 Bitmap 格式是 RGB_565 格式,而 Picasso 默认的是 ARGB_8888 格式,这个内存开销要小一半。Android关于图片内存计算,共有四种,分别是:
- ALPHA_8:每个像素占用1byte内存
- ARGB_4444:每个像素占用2byte内存
- ARGB_8888:每个像素占用4byte内存(默认,色彩最细腻=显示质量最高=占用的内存也最大)
- RGB_565:每个像素占用2byte内存(8bit = 1byte)
举例说明:一个32位的PNG=ARGB_8888=1204x1024,那么占用空间是:1024x1024x(32/8) = 4,194,304kb=4M左右
在解析图片的时候,为了避免oom和节省内存,最好使用ARGB_4444模式(节省一半的内存空间)
4.2 缺点
- 使用方法复杂
由于Glide其功能强大,所以使用的方法非常多,其源码也相对的复杂 - 包较大
5. 相比其他图片加载库(Picasso & Fresco)
- 对比Picasso
Glide 是在Picasso 基础之上进行的二次开发做了不少改进,不过这也导致包比 Picasso 大不少,不过也就不到 500k(Picasso 是100多k),用法较为复杂,不过毕竟级别还是蛮小的,影响不是很大 - 对比Fresco
使用较Fresco简单,但性能(加载速度 & 缓存)却比不上Fresco
6. 应用场景
根据Glide的特点和与其他图片加载库的对比,可以得出其使用场景:
- 需要更多的内容表现形式(如Gif);
- 更高的性能要求(缓存 & 加载速度);
7. 总结
- Glide使用起来是不是非常简单?相信你看完这篇文章后你能全面掌握Glide的用法
- 但是Glide的源码却不简单,接下来我会对Glide的源码进行详细分析,如果感兴趣的话可以继续关注Carson_Ho的安卓开发笔记!!!!
欢迎关注Carson_Ho的简书!
不定期分享关于安卓开发的干货,追求短、平、快,但却不缺深度。