Glide源码解析三部曲-之二load

63 阅读1分钟

时序图

Glide_with_load.png

2、目的

最终会生成一个RequestBuilder,这是一个通用请求构建类,把要用的参数放到RequestBuilder中比如最后一步就是把,load的参数丢到 model里,不管是String还是int。

//RequestManager.CLASS

public class RequestManager implements LifecycleListener,
ModelTypes<RequestBuilder<Drawable>> {
public RequestBuilder<Drawable> load(@Nullable String string) {
//这里调用 Drawable 图片加载请求器为其加载
return asDrawable().load(string);
}
public RequestBuilder<Drawable> asDrawable() {

return as(Drawable.class);

}

@NonNull

@CheckResult

@Override

public RequestBuilder<Drawable> load(@Nullable Uri uri) {
 

return asDrawable().load(uri);

}

@NonNull

@CheckResult

@Override

public RequestBuilder<Drawable> load(@Nullable File file) {

return asDrawable().load(file);

}

public <ResourceType> RequestBuilder<ResourceType> as(

@NonNull Class<ResourceType> resourceClass) {

return new RequestBuilder<>(glide, this, resourceClass,

context);

}

}



//RequestBuilder.CLASS

public class RequestBuilder<TranscodeType> extends

BaseRequestOptions<RequestBuilder<TranscodeType>>

implements Cloneable,

ModelTypes<RequestBuilder<TranscodeType>> {

public RequestBuilder<TranscodeType> load(@Nullable String

string) {

return loadGeneric(string);

}

// 描述加载的数据源-这里可以看做是我们刚刚传递进来的 http://xxxx.png

@Nullable private Object model;

// 描述这个请求是否已经添加了加载的数据源

private boolean isModelSet;

private RequestBuilder<TranscodeType> loadGeneric(@Nullable

Object model) {

this.model = model;

isModelSet = true;

return this;

}

}