Glide使用了DiskCache+MemoryCache+activeResources三级缓存
DiskCache是磁盘缓存,这个不用多说了
MemoryCache和activeResources是两级内存缓存
MemoryCache存储当前没有使用到的Bitmap,当MemoryCache中命中Bitmap后,该Bitmap又被缓存至activeResources中,并从MemoryCache中删除
private EngineResource<?> loadFromCache(Key key, boolean isMemoryCacheable) {
if (!isMemoryCacheable) {
return null;
}
EngineResource<?> cached = getEngineResourceFromCache(key);
if (cached != null) {
cached.acquire();
activeResources.activate(key, cached);
}
return cached;
}
private EngineResource<?> getEngineResourceFromCache(Key key) {
Resource<?> cached = cache.remove(key);
final EngineResource<?> result;
if (cached == null) {
result = null;
} else if (cached instanceof EngineResource) {
// Save an object allocation if we've cached an EngineResource (the typical case).
result = (EngineResource<?>) cached;
} else {
result = new EngineResource<>(cached, true /*isMemoryCacheable*/, true /*isRecyclable*/);
}
return result;
}
activeResources可以理解为高速缓存,存储当前正在使用的Bitmap,并且使用weakReference+ReferenceQueue的方式保存,发生Gc的时候,又被缓存至MemoryCache中
下面是ActiveResources类
package com.bumptech.glide.load.engine;
import android.os.Handler;
import android.os.Handler.Callback;
import android.os.Looper;
import android.os.Message;
import android.os.Process;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.annotation.VisibleForTesting;
import com.bumptech.glide.load.Key;
import com.bumptech.glide.load.engin

Glide采用了DiskCache、MemoryCache和activeResources三级缓存策略。DiskCache为磁盘缓存,MemoryCache储存未使用的Bitmap,而activeResources作为高速缓存,存储当前使用中的Bitmap并使用弱引用管理。当发生GC时,Bitmap会重新进入MemoryCache。这种设计提高了内存缓存的效率和响应速度。
最低0.47元/天 解锁文章
3183

被折叠的 条评论
为什么被折叠?



