Glide源码解析02-load

Glide源码解析02-load

最简单的Glide调用,如下所示,下面将根据Glide的调用顺序,进行源码解析。

Glide.with(this)
        .load(uri)
        .into(img);

load方法

从上一步with中,我们得到了RequestManager对象,下面再来看RequestManager#load方法。
load方法也有很多重载,比如Sting、Uri、File、Integer等。

简析

load方法主要是创建DrawableTypeRequest,并将记录相关的uri等数据供后续使用。

详情

以下以String的重载为例。

2.0 RequestManager#load()

load方法的内部先会调用fromString(),获取到DrawableTypeRequest后,再调用其DrawableTypeRequest#load()。

public DrawableTypeRequest<String> load(String string) {
    return (DrawableTypeRequest<String>) fromString().load(string);
}  
2.1 fromString()

fromString()中,直接调用了loadGeneric(),并传入了String.class 这个参数。

public DrawableTypeRequest<String> fromString() {
   return loadGeneric(String.class);
}  
2.2 loadGeneric()

在loadGeneric()中,调用了Glide.buildStreamModeLoader和Glide.buildFileDescriptorModeLoader来获取ModelLoader对象。

ModelLoader对象用于加载图片,内部有一个getResourceFetcher()方法,用于获取DataFetcher对象,DataFetcher是用于从网络,磁盘等地方获取图片的,这个在后续中会用到。

之后,会new一个DrawableTypeRequest对象并把streamModelLoader和fileDescriptorModelLoader都传入。

DrawableTypeRequest提供asBitmap和asGif的这两个方法,分别用于强制加载静态图片和动态图片。

最后调用RequestManager#optionsApplier.apply将DrawableTypeRequest赋值给相关字段。

private <T> DrawableTypeRequest<T> loadGeneric(Class<T> modelClass) {
ModelLoader<T, InputStream> streamModelLoader = Glide.buildStreamModelLoader(modelClass, context);
ModelLoader<T, ParcelFileDescriptor> fileDescriptorModelLoader =
        Glide.buildFileDescriptorModelLoader(modelClass, context);
//...

return optionsApplier.apply(
        new DrawableTypeRequest<T>(modelClass, streamModelLoader, fileDescriptorModelLoader, context,
                glide, requestTracker, lifecycle, optionsApplier));
}

回到 2.0,我们再来看DrawableTypeRequest.load()

2.3 DrawableTypeRequest.load()

DrawalbeTypeRequest.load()直接调用了其父类的load()
在父类GenericRequestBuilderload()中,仅将参数进行了记录。

GenericRequestBuilder#load()

public GenericRequestBuilder<ModelType, DataType, ResourceType, TranscodeType> load(ModelType model) {
    this.model = model;
    isModelSet = true;
    return this;
}

至此,完成了load()方法的全部调用,并返回了GenericRequestBuilder(或其子类)对象。

更多

Glide源码解析01-with
Glide源码解析02-load
Glide源码解析03-into
Glide源码解析04-decode
Glide源码解析05-onLoadComplete
Glide源码解析06-Glide流程图

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

氦客

你的鼓励是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值