Glide
介绍
- Glide是一个Android图片加载库,它能够加载本地或网络上的图片,并且支持多种图片格式。同时,Glide还提供了灵活的API,允许开发者自定义图片加载过程。
依赖
repositories {
google()
mavenCentral()
}
dependencies {
implementation 'com.github.bumptech.glide:glide:4.16.0'
}
Glide的使用
- 加载图片:使用Glide的with()方法创建一个Glide实例,并使用load()方法指定要加载的图片资源。
Glide.with(context)
.load(imageUrl)
.into(imageView);
其中,context是当前上下文对象,imageUrl是要加载的图片URL或本地路径,imageView是要显示图片的ImageView控件。
- 加载带有占位图
Glide.with(this).load(url).placeholder(R.drawable.loading).into(imageView);
-加载指定格式的图片
静态:
Glide.with(this)
.load(url)
.asBitmap()//只加载静态图片,如果是gif图片则只加载第一帧。
.placeholder(R.drawable.loading)
.error(R.drawable.error)
.diskCacheStrategy(DiskCacheStrategy.NONE)
.into(imageView);
动态:
Glide.with(this)
.load(url)
.asGif()//加载动态图片,若现有图片为非gif图片,则直接加载错误占位图。
.placeholder(R.drawable.loading)
.error(R.drawable.error)
.diskCacheStrategy(DiskCacheStrategy.NONE)
.into(imageView);
- 指定图片大小
Glide.with(this)
.load(url)
.placeholder(R.drawable.loading)
.error(R.drawable.error)
.diskCacheStrategy(DiskCacheStrategy.NONE)
.override(100, 100)//指定图片大小
.into(imageView);
- 设置选项:可以通过链式调用的方式设置一些选项,例如设置占位符、错误图片、缩略图、图片变换等。
Glide.with(context)
.load(imageUrl)
.placeholder(R.drawable.placeholder)
.error(R.drawable.error)
.thumbnail(0.5f)
.centerCrop()
.into(imageView);
-清除缓存:如果需要清除Glide的缓存,可以使用clearDiskCache()和clearMemory()方法。
Glide.get(context).clearDiskCache(); // 清除磁盘缓存
Glide.get(context).clearMemory(); // 清除内存缓存
Glide加载图片的步骤
发起加载图片请求:发起加载图片请求当我们用 into方法加载图片时,就是发起了一次图片加载请求,这个请求会被Glide封装成一个Request对象,并交给RequestManager来处理。
执行解码任务:执行解码任务我们在load()方法中设置的图片来源会传到 DecodeJob中,DecodeJob() 就会被 Engine()提交到线程池中开始执行。解码任务的具体流程包括从数据源获取原始数据、解码数据生成Bitmap对象,并对Bitmap进行缩放、裁剪等操作。
加载图片:当解码任务完成后,Glide会将解码得到的Bitmap对象加载到ImageView中显示。在加载过程中,Glide还会对图片进行内存缓存和磁盘缓存,以便下次快速加载。
Glide的图片缓存
Glide使用了三级缓存机制,图片的缓存分为内存、磁盘和来源,也就是从内存获取不到图片时,再去磁盘获取图片,从磁盘获取不到图片时,再从图片来源获取图片。
内存缓存:
Glide使用内存缓存来临时存储已解码的图片。内存缓存可以快速地将图片加载到内存中,以便下次快速访问。默认情况下,Glide会根据设备的内存大小自动计算可用的内存缓存大小,并将其分配给应用程序。当应用程序被关闭或重启时,内存缓存会被清空。
Glide使用磁盘缓存来持久化存储已下载的图片。磁盘缓存可以避免重复下载图片,提高加载速度。磁盘缓存默认使用应用程序的私有文件目录作为缓存目录。当磁盘缓存达到最大大小时,Glide会自动删除最旧的缓存文件。
当我们使用Glide加载图片时,Glide会首先从内存缓存中查找是否存在该图片的缓存。如果内存缓存中不存在,则会继续查找磁盘缓存。如果磁盘缓存中也不存在,则会根据图片来源(如网络、本地文件等)发起相应的请求下载图片,并将下载的图片缓存到内存缓存和磁盘缓存中,以便下次快速访问。这种三级缓存机制可以有效地提高图片加载速度,并节省网络流量和内存资源