Glide 源码解析 之 缓存

缓存总览

Glide 的缓存类型有 2 种(内存缓存、文件缓存),每种类型的缓存又各有2级,共计 4 级缓存:

  1. 一级内存缓存:ActiveResource
  2. 二级内存缓存:LruResourceCache
  3. 一级文件缓存:
  4. 二级文件缓存:

ActiveResource

内部实现

通过HashMap + WeakReference实现

final Map<Key, ResourceWeakReference> activeEngineResources = new HashMap<>();

static final class ResourceWeakReference extends WeakReference<EngineResource<?>> {}
复制代码

缓存加入、移除的时机

加入时机:图片记载完成 或 从 LruCache中取出
移除时机:Engine.onResourceRelease()

LruResourceCache

内部实现

通过LruCache实现

public class LruResourceCache extends LruCache<Key, Resource<?>> implements MemoryCache
复制代码

缓存加入、移除的时机

加入时机:图片记载完成
移除时机:从 LruCache中取出cache

文件缓存

核心类

  • DiskLruCache
  • DiskLruCacheWrapper

缓存加入、移除的时机

加入时机:decode完成
移除时机:清空文件缓存

一级文件缓存相关类

ResourceCacheGenerator
加载被后期处理过(采样、变形)的图片

/**
 * Generates {@link com.bumptech.glide.load.data.DataFetcher DataFetchers} from cache files
 * containing downsampled/transformed resource data.
 */
复制代码

ResourceCacheKey

/**
 * A cache key for downsampled and transformed resource data + any requested signature.
 */
复制代码

二级文件缓存相关类

DataCacheGenerator
从数据换获取的原始图片

/**
 * Generates {@link com.bumptech.glide.load.data.DataFetcher DataFetchers} from cache files
 * containing original unmodified source data.
 */
复制代码

DataCacheKey

/**
 * A cache key for original source data + any requested signature.
 */
复制代码

@startuml

interface Key {
  void updateDiskCacheKey(MessageDigest);
  boolean equals(Object);
  int hashCode();
}

class DataCacheKey{

}

class ResourceCacheKey{

}

Key <-- DataCacheKey
Key <-- ResourceCacheKey

@enduml
复制代码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值