美文网首页实用干货知识图谱每天进步一点点
Glide 图片库原理(三)缓存机制

Glide 图片库原理(三)缓存机制

作者: zcwfeng | 来源:发表于2021-01-07 00:09 被阅读0次

缓存机制

Glide.png

查找缓存使用

  1. 先到活动缓存查找,如果有直接返回显示
  2. 如果活动缓存没有,那么去LRU内存缓存查找,如果有那么剪切到活动缓存,返回显示
  3. 如果LRU内存缓存没查到,到磁盘缓存查找,如果找到那么,放到活动缓存,返回显示
  4. 如果磁盘缓存没找到,那么去网络请求,放到磁盘缓存,然后放到活动缓存,加载返回显示。

用完移除

  1. Lefecycle 管理的生命周期,onDestroy,活动缓存(就是内存一个Map集合)释放之后,移动到LRU内存
  2. 磁盘缓存什么时候过期?LUR算法管理磁盘缓存机制

资源封装

源码中查看EngineKey-----相当于key,算法序列abcdsxxfaskldfjklf...
源码中查看Source-----相当于value(Bitmap),调用系统转换成Bitmap

DiskCacheStrategy

  • DiskCacheStrategy.NONE: 表示不缓存任何内容。
  • DiskCacheStrategy.RESOURCE: 在资源解码后将数据写入磁盘缓存,即经过缩放等转换后的图片资源。
  • DiskCacheStrategy.DATA: 在资源解码前将原始数据写入磁盘缓存。
  • DiskCacheStrategy.ALL : 使用DATA和RESOURCE缓存远程数据,仅使用RESOURCE来缓存本地数据。
  • DiskCacheStrategy.AUTOMATIC:它会尝试对本地和远程图片使用最佳的策略。当你加载远程数据(比如,从URL下载)时,AUTOMATIC 策略仅会存储未被你的加载过程修改过(比如,变换,裁剪–译者注)的原始数据,因为下载远程数据相比调整磁盘上已经存在的数据要昂贵得多。对于本地数据,AUTOMATIC 策略则会仅存储变换过的缩略图,因为即使你需要再次生成另一个尺寸或类型的图片,取回原始数据也很容易。默认使用这种缓存策略
  • 通过RequestOptions的.diskCacheStrategy(参数)方法设置。
业务场景
  1. 降低缓存图片的质量,减少内存消耗

情景: 相册类的App经常需要同时展示大量的图片,这种情况下图片的质量可以低一点,因为加载速度优先于图片的质量。

解决办法: 我们可以设置译码的格式,在RequestOptions中加入.encodeFormat(Bitmap.CompressFormat.WEBP).encodeQuality(10))的选项,①encodeFormat的参数有Bitmap.CompressFormat.PNG,Bitmap.CompressFormat.JPEG,Bitmap.CompressFormat.WEBP(质量从高到低);②encodeQuality设置的是0-100的int类型,一个质量百分比参数,越小质量越低。

情景: 大体的意思应该是同一个URL在不同的时间可能会指向不同的资源,所以同样需要实时更新。

解决办法相同

  1. 头像没有及时更新的问题 && URL重定向

情景: 开发一款有头像的APP,我们修改了头像并且更新到了服务端,可是当我们点击查看大图时加载出来的还是原来的头像。

解决办法: 这是Glide强大的缓存带来的副作用,我们可以在RequestOptions中加入.diskCacheStrategy(DiskCacheStrategy.NONE).skipMemoryCache(true)的选项。那么缓存的功能就会全部关闭,从而使得每次都是从服务端加载,所以头像会是最新。

  1. 省流量模式

情景: 省流量模式的应用情景就是减少不必要图片的加载。

解决办法: 我们可以在RequestOptions中加入onlyRetrieveFromCache(true)的选项。那么图片就只会从缓存中读取,如果没有缓存则不加载图片,从而达到减少流量消耗的目的。

相关文章

  • Glide 图片库原理(三)缓存机制

    缓存机制 查找缓存使用 先到活动缓存查找,如果有直接返回显示 如果活动缓存没有,那么去LRU内存缓存查找,如果有那...

  • Android基础(41)图片加载框架

    1)图片库对比2)Glide源码解析3)图片框架缓存实现4)LRUCache原理。LruCache默认缓存大小5)...

  • Glide 加载相同的URL导致无法更新图片问题

    简介:Glide在加载图片的时候默认使用了缓存机制。Glide的缓存机制分为二级:内存缓存、磁盘缓存。缓存的过程是...

  • Glide源码解析(4.X版本)

    知识点汇总: 一:Glide项目概述 二:Glide加载图片的原理 三:Glide三级缓存的设计 四:Glide如...

  • Glide实现原理

    一.Glide缓存机制 Glide采取的多级缓存机制,能够较为友好地实现图片、动图的加载。其主要有 内存缓存+磁盘...

  • Android面试 Glide源码流程

    面试问题 简单介绍一下Glide缓存 具体说说Glide的三级缓存原理 Glide加载一个100x100的图片,是...

  • Glide源码分析

    一、源码分析:1、with()2、load()3、into()二、缓存机制1、Glide缓存机制简介1.1缓存的图...

  • 三方框架原理分析总结

    三方框架原理分析总结 Glide的缓存机制 配上代码来说,统一的key,依据key去找;代码在Engine中key...

  • Android 【手撕Glide】--Glide缓存机制(面试)

    本文源码解析基于Glide 4.6.1 系列文章Android 【手撕Glide】--Glide缓存机制Andro...

  • Glide 面试题

    1. 简单介绍一下Glide缓存 Glide 缓存机制主要分为2种:内存缓存和磁盘缓存使用内存缓存的原因是:防止应...

网友评论

    本文标题:Glide 图片库原理(三)缓存机制

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