缓存总览
Glide 的缓存类型有 2 种(内存缓存、文件缓存),每种类型的缓存又各有2级,共计 4 级缓存:
- 一级内存缓存:ActiveResource
- 二级内存缓存:LruResourceCache
- 一级文件缓存:
- 二级文件缓存:
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