美文网首页
Glide 源码解析 之 缓存

Glide 源码解析 之 缓存

作者: 詹徐照 | 来源:发表于2018-12-08 19:29 被阅读11次

缓存总览

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()

image

LruResourceCache

内部实现

通过LruCache实现

public class LruResourceCache extends LruCache<Key, Resource<?>> implements MemoryCache

缓存加入、移除的时机

加入时机:图片记载完成

移除时机:从 LruCache中取出cache

image

文件缓存

核心类

  • DiskLruCache
  • DiskLruCacheWrapper

缓存加入、移除的时机

加入时机:decode完成

移除时机:清空文件缓存

image
image

一级文件缓存相关类

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.
 */
image
@startuml

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

class DataCacheKey{

}

class ResourceCacheKey{

}

Key <-- DataCacheKey
Key <-- ResourceCacheKey

@enduml

相关文章

网友评论

      本文标题:Glide 源码解析 之 缓存

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