緩存總覽
Glide 的緩存類型有 2 種(內(nèi)存緩存简卧、文件緩存)航揉,每種類型的緩存又各有2級(jí)室埋,共計(jì) 4 級(jí)緩存:
- 一級(jí)內(nèi)存緩存:ActiveResource
- 二級(jí)內(nèi)存緩存:LruResourceCache
- 一級(jí)文件緩存:
- 二級(jí)文件緩存:
ActiveResource
內(nèi)部實(shí)現(xiàn)
通過HashMap + WeakReference實(shí)現(xiàn)
final Map<Key, ResourceWeakReference> activeEngineResources = new HashMap<>();
static final class ResourceWeakReference extends WeakReference<EngineResource<?>> {}
緩存加入级解、移除的時(shí)機(jī)
加入時(shí)機(jī):圖片記載完成 或 從 LruCache中取出
移除時(shí)機(jī):Engine.onResourceRelease()
image
LruResourceCache
內(nèi)部實(shí)現(xiàn)
通過LruCache實(shí)現(xiàn)
public class LruResourceCache extends LruCache<Key, Resource<?>> implements MemoryCache
緩存加入、移除的時(shí)機(jī)
加入時(shí)機(jī):圖片記載完成
移除時(shí)機(jī):從 LruCache中取出cache
image
文件緩存
核心類
- DiskLruCache
- DiskLruCacheWrapper
緩存加入试伙、移除的時(shí)機(jī)
加入時(shí)機(jī):decode完成
移除時(shí)機(jī):清空文件緩存
image
image
一級(jí)文件緩存相關(guān)類
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.
*/
二級(jí)文件緩存相關(guān)類
DataCacheGenerator
從數(shù)據(jù)換獲取的原始圖片
/**
* 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