美文网首页
glide4.7.1解析

glide4.7.1解析

作者: 一钱科技 | 来源:发表于2018-07-12 16:47 被阅读0次

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

    1. Glide缓存机制简介

    1.1 缓存的图片资源

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

    • 原始图片(Source) :即图片源的图片初始大小 & 分辨率
    • 转换后的图片(Result) :经过 尺寸缩放 和 大小压缩等处理后的图片

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

    1.2 缓存机制设计

    • Glide的缓存功能设计成 二级缓存:内存缓存 & 硬盘缓存

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

    • 缓存读取顺序:内存缓存 –> 磁盘缓存 –> 网络
    1. 内存缓存 默认开启
    2. Glide中,内存缓存 & 磁盘缓存相互不影响,独立配置
    • 二级缓存的作用不同:
    1. 内存缓存:防止应用 重复将图片数据 读取到内存当中

    只 缓存转换过后的图片

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

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

    2. Glide 缓存功能实现流程

    • 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

    相关文章

      网友评论

          本文标题:glide4.7.1解析

          本文链接:https://www.haomeiwen.com/subject/mwfhpftx.html