glide4.7.1解析

2018-07-12  本文已影响0人  一钱科技

本文章整理:Android源码分析:手把手带你分析 Glide的缓存功能

1. Glide缓存机制简介

1.1 缓存的图片资源

Glide 需要缓存的 图片资源 分为两类:

当使用 Glide加载图片时,Glide默认 根据 View视图对图片进行压缩 & 转换,而不显示原始图(这也是Glide加载速度高于Picasso的原因)

1.2 缓存机制设计

并不是三级缓存,因为 从网络加载 不属于缓存

  1. 内存缓存 默认开启
  2. Glide中,内存缓存 & 磁盘缓存相互不影响,独立配置
  1. 内存缓存:防止应用 重复将图片数据 读取到内存当中

只 缓存转换过后的图片

  1. 硬盘缓存:防止应用 重复从网络或其他地方重复下载和读取数据

可缓存原始图片 & 缓存转换过后的图片,用户自行设置

2. Glide 缓存功能实现流程

2.1 内存缓存

// 默认开启内存缓存,用户不需要作任何设置
Glide.with(this)
     .load(url)
     .into(imageView);

// 可通过 API 禁用 内存缓存功能
Glide.with(this)
     .load(url)
     .skipMemoryCache(true) // 禁用 内存缓存
     .into(imageView);

Glide的内存缓存实现是基于:LruCache 算法(Least Recently Used) & 弱引用机制

  1. LruCache算法原理:将 最近使用的对象 用强引用的方式 存储在LinkedHashMap中 ;当缓存满时 ,将最近最少使用的对象从内存中移除
  2. 弱引用:弱引用的对象具备更短生命周期,因为 当JVM进行垃圾回收时,一旦发现弱引用对象,都会进行回收(无论内存充足否)

2.2 磁盘缓存

Glide.with(this)
     .load(url)
     .diskCacheStrategy(DiskCacheStrategy.NONE)
     .into(imageView);

// 缓存参数说明
// DiskCacheStrategy.NONE:不缓存任何图片,即禁用磁盘缓存
// DiskCacheStrategy.ALL :缓存原始图片 & 转换后的图片
// DiskCacheStrategy.SOURCE:只缓存原始图片(原来的全分辨率的图像,即不缓存转换后的图片)
// DiskCacheStrategy.RESULT:(默认)只缓存转换后的图片(即最终的图像:降低分辨率后 / 或者转换后 ,不缓存原始图片

使用Glide 自定义的DiskLruCache算法

  1. 该算法基于 Lru 算法中的DiskLruCache算法,具体应用在磁盘缓存的需求场景中
  2. 该算法被封装到Glide自定义的工具类中(该工具类基于Android 提供的DiskLruCache工具类

3. 缓存机制代码实现

image.png
上一篇下一篇

猜你喜欢

热点阅读