返回

Glide源码解析-加载流程

Android

我一直想要阅读Glide源码,但是苦于时间和功力都不够,总是断断续续的,趁着现在有一些空暇时间,来简要分析Glide的源码。Glide的实现太过复杂,不可能做到面面俱到,如果每一行都细致分析,很容易陷入作者的优化细节中去而偏离主线,因此只针对几个主要功能做解析即可。

以下分析全部基于Glide 4.0版本。

Glide的加载流程

Glide的加载流程大致可以分为以下几个步骤:

  1. 加载图片资源,可以是网络图片,也可以是本地图片。
  2. 将图片资源解码成Bitmap对象。
  3. 对Bitmap对象进行转换,比如缩放、裁剪等。
  4. 将转换后的Bitmap对象缓存到内存中。
  5. 将转换后的Bitmap对象显示在View上。

1. 加载图片资源

Glide可以通过多种方式加载图片资源,包括:

  • 从网络加载图片
  • 从本地文件加载图片
  • 从Assets目录加载图片
  • 从资源目录加载图片

2. 将图片资源解码成Bitmap对象

Glide使用BitmapFactory来将图片资源解码成Bitmap对象。BitmapFactory提供了几种解码选项,比如:

  • inSampleSize:可以指定图片的缩放比例,可以有效减少内存消耗。
  • inPreferredConfig:可以指定图片的格式,比如ARGB_8888、RGB_565等。

3. 对Bitmap对象进行转换

Glide提供了丰富的转换功能,可以对Bitmap对象进行各种操作,比如:

  • 缩放
  • 裁剪
  • 旋转
  • 颜色调整
  • 模糊处理等

4. 将转换后的Bitmap对象缓存到内存中

Glide使用内存缓存来缓存转换后的Bitmap对象。内存缓存的默认大小为20MB,可以根据需要进行调整。当内存缓存已满时,Glide会根据LRU算法淘汰最不常用的Bitmap对象。

5. 将转换后的Bitmap对象显示在View上

Glide可以使用多种方式将转换后的Bitmap对象显示在View上,包括:

  • 直接将Bitmap对象设置给View
  • 使用ImageView的setImageBitmap()方法设置Bitmap对象
  • 使用Picasso的load()方法加载Bitmap对象

Glide的自定义

Glide提供了丰富的自定义选项,可以根据需要进行调整。比如:

  • 可以自定义内存缓存的大小
  • 可以自定义磁盘缓存的大小
  • 可以自定义图片的转换方式
  • 可以自定义图片的加载策略等

Glide的优点

Glide的主要优点包括:

  • 加载图片速度快
  • 内存占用少
  • 功能丰富
  • 使用简单

Glide的缺点

Glide的主要缺点包括:

  • 配置复杂
  • 依赖库较多
  • 文档不够完善

总结

Glide是一款功能强大、使用简单的图片加载库,非常适合在Android项目中使用。但是,Glide的配置也比较复杂,需要一定的时间来学习和掌握。