Glide缓存机制

作者: 奔跑吧李博 | 来源:发表于2023-11-10 21:04 被阅读0次
Glide加载资源流程
  • Glide使用了ActiveResources(活动缓存弱引用)+MemoryCache(内存缓存Lru算法)+DiskCache(磁盘缓存Lru算法)。

  • ActiveResources:存储当前界面使用到的图片。界面不展示后,该Bitmap又被缓存至MemoryCache中,并从ActiveResources中删除。

  • Memory Cache:存储当前没有使用到的Bitmap,当MemoryCache中得到Bitmap后,该Bitmap又被缓存至ActiveResources中,并从MemoryCache中删除。

  • Disk Cache:持久缓存。例如图片加圆角,处理后图片会被缓存到文件中,应用被再次打开时可以加载缓存直接使用。

注意: ActiveResources + MemoryCache是内存缓存,都属于运行时缓存,且互斥(同一张图片不会同时缓存在ActiveResources+MemoryCache),应用被杀死后将不存在。

Glide 的缓存分层结构:

内存缓存在默认情况下,Glide自动开启内存缓存的,我们也可以通过调用skipMemoryCache(true) 方法,禁用内存缓存

RequestOptions options = new RequestOptions()  
        // 关闭内存缓存
        .skipMemoryCache(true);  

设置磁盘缓存模式:

diskCacheStrategy(DiskCacheStrategy.xxx)  //是否开启磁盘缓存 

可以设置4种模式:

DiskCacheStrategy.NONE:表示不缓存任何内容。
DiskCacheStrategy.SOURCE:表示只缓存原始图片。
DiskCacheStrategy.RESULT:表示只缓存转换过后的图片(默认选项)。
DiskCacheStrategy.ALL :表示既缓存原始图片,也缓存转换过后的图片。
Glide的缓存Key是什么

生成缓存Key的代码在Engine类的load()方法当中:

final String id = fetcher.getId();
EngineKey key = keyFactory.buildKey(id, signature, width, height, 
loadProvider.getCacheDecoder(),loadProvider.getSourceDecoder(), 
transformation, loadProvider.getEncoder(),transcoder, 
loadProvider.getSourceEncoder());

在源码里查看可以知道,每一次的load方法内部,都会有一个fetcher.getId()方法获得了一个id字符串,这个字符串也就是我们要加载的图片的唯一标识,比如说如果是一张网络上的图片的话,那么这个id就是这张图片的url地址。然后,这个id会结合signature、width、height等等10个参数一起传入到EngineKeyFactory的buildKey()方法当中,从而构建出了一个EngineKey对象,这个EngineKey也就是Glide中的缓存Key了。 因此,如果你图片的width或者height发生改变,也会生成一个完全不同的缓存Key。
(这里补充一下:4.4以前是Bitmap复用必须长宽相等才可以复用,而4.4及以后是Size>=所需就可以复用,只不过需要调用reconfigure来调整尺寸)

参考:
https://blog.csdn.net/Love667767/article/details/127601652
https://blog.csdn.net/yinianzhijian99/article/details/123128564
https://juejin.cn/post/7006126659984162847
https://juejin.cn/post/6844903763342262280

相关文章

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

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

  • Glide实现原理

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

  • Glide源码分析

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

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

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

  • Glide 面试题

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

  • glide4.7.1解析

    本文章整理:Android源码分析:手把手带你分析 Glide的缓存功能 1. Glide缓存机制简介 1.1 缓...

  • Glide->02Bitmap复用

    参考文章: Glide源码分析之缓存处理 Glide缓存机制 一、源码解析: 如果是第一次加载图片, 即不存在缓存...

  • Android图片框架之Glide

    Gilde缓存机制 Glide缓存分为内存缓存和磁盘缓存,其中内存缓存是由弱引用+LruCache组成。 取的顺序...

  • Glide缓存机制

    前言 本文基于Glide v3.7.0源码分析,Glide v4.0大致流程和v3.7.0差不多,在一些技术细节上...

  • Glide ② — 缓存机制

    阅读本文需要先了解Glide加载流程 缓存的分类 首先介绍一下Glide中对图片资源的封装类:EngineReso...

网友评论

    本文标题:Glide缓存机制

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