最近在阅读Glide源码时,对into方法做了一个简单的时序图。走到SourceGenerator类里,就很难走下去了。不知道是哪里最终去进行网络连接,获取流操作。
@Override
public boolean startNext() {
//缓存上次的数据
if (dataToCache != null) {
Object data = dataToCache;
dataToCache = null;
cacheData(data);
}
//如果已经在执行,则返回
if (sourceCacheGenerator != null && sourceCacheGenerator.startNext()) {
return true;
}
sourceCacheGenerator = null;
loadData = null;
boolean started = false;
//根据model(load方法的参数对应的Class)从registry中获取loader
while (!started && hasNextModelLoader()) {
//helper是通过glideContext获取loader的;而GlideContext在Glide的构造方法中被初始化
//其中,registry被传递给了glideContext
//glideContext.getRegistry().getModelLoaders
loadData = helper.getLoadData().get(loadDataListIndex++);
//如果拿到了loader并且有可用的缓存数据或者正确识别到需要加载的数据路径
if (loadData != null
&& (helper.getDiskCacheStrategy().isDataCacheable(loadData.fetcher.getDataSource())
|| helper.hasLoadPath(loadData.fetcher.getDataClass()))) {
//则说明可以开始加载了
start