我正在发出如下的请求,但我想知道downloadOnly是否先检查缓存中的图像?
FutureTarget<File> future = Glide.with(applicationContext)
.load(yourUrl)
.downloadOnly(500, 500);
File cacheFile = future.get();
我的主要问题是yourUrl中的图像已经加载到缓存中,我需要一种同步方法从后台线程中的缓存中检索图像。
上面的代码有效,但我需要知道在downloadOnly之前是否有缓存检查。感谢。
答案 0 :(得分:2)
在为Glide打开详细日志记录后,我能够确切地看到调用图像时发生了什么,而DecodeJob主要是在不到10ms的时间内从缓存中获取,有时它再次获取数据,不确定是否可能从磁盘或电线。
所以最终我必须使用自定义StreamModelLoader来检查缓存,如果尝试通过线路,则会抛出异常,然后在缓存MISS上使用默认流。
private final StreamModelLoader<String> cacheOnlyStreamLoader = new StreamModelLoader<String>() {
@Override
public DataFetcher<InputStream> getResourceFetcher(final String model, int i, int i1) {
return new DataFetcher<InputStream>() {
@Override
public InputStream loadData(Priority priority) throws Exception {
throw new IOException();
}
@Override
public void cleanup() {
}
@Override
public String getId() {
return model;
}
@Override
public void cancel() {
}
};
}
};
FutureTarget<File> future = Glide.with(progressBar.getContext())
.using(cacheOnlyStreamLoader)
.load(url).downloadOnly(width, height);
File cacheFile = null;
try {
cacheFile = future.get();
} catch(Exception ex) {
ex.printStackTrace(); //exception thrown if image not in cache
}
if(cacheFile == null || cacheFile.length() < 1) {
//didn't find the image in cache
future = Glide.with(progressBar.getContext())
.load(url).downloadOnly(width, height);
cacheFile = future.get(3, TimeUnit.SECONDS); //wait 3 seconds to retrieve the image
}