Glide源码解析(二)

上面一篇我们讲了Glide的with方法,没有看的请戳Glide源码解析(一), 这篇我们来看Glide的load方法,with方法返回的是一个GlideRequests,那么load肯定是在这个类里面,GlideRequests继承自RequestManager(管理和请求Glide的请求类,可以通过Activity和Fragment的生命周期自动停止和从起请求)。接下来我们看load方法,GlideRequests中load方法有很多个:

 public GlideRequest<Drawable> load(@Nullable Bitmap arg0) {
    return (GlideRequest<Drawable>) super.load(arg0);
  }

  @Override
  @NonNull
  @CheckResult
  public GlideRequest<Drawable> load(@Nullable Drawable arg0) {
    return (GlideRequest<Drawable>) super.load(arg0);
  }

  @Override
  @NonNull
  @CheckResult
  public GlideRequest<Drawable> load(@Nullable String arg0) {
    return (GlideRequest<Drawable>) super.load(arg0);
  }

  @Override
  @NonNull
  @CheckResult
  public GlideRequest<Drawable> load(@Nullable Uri arg0) {
    return (GlideRequest<Drawable>) super.load(arg0);
  }

  @Override
  @NonNull
  @CheckResult
  public GlideRequest<Drawable> load(@Nullable File arg0) {
    return (GlideRequest<Drawable>) super.load(arg0);
  }

  @Override
  @NonNull
  @CheckResult
  public GlideRequest<Drawable> load(@Nullable Integer arg0) {
    return (GlideRequest<Drawable>) super.load(arg0);
  }

  @Override
  @Deprecated
  @CheckResult
  public GlideRequest<Drawable> load(@Nullable URL arg0) {
    return (GlideRequest<Drawable>) super.load(arg0);
  }

  @Override
  @NonNull
  @CheckResult
  public GlideRequest<Drawable> load(@Nullable byte[] arg0) {
    return (GlideRequest<Drawable>) super.load(arg0);
  }

  @Override
  @NonNull
  @CheckResult
  public GlideRequest<Drawable> load(@Nullable Object arg0) {
    return (GlideRequest<Drawable>) super.load(arg0);
  }

相比于3.v的load(Object o)对参数进行了区分,跟踪接入任意的load方法形式其实都差不多,那么我们选择其中一个如下,其他方法只有参数不同:

public RequestBuilder<Drawable> load(@Nullable Uri uri) {
    return asDrawable().load(uri);
  }

其中asDrawable()是用已经注册的ResourceDecoder来加载资源,解码Drawable的任何子类。默认情况下返回泛型为BitmapDrawable或者GifDrawable的RequestBuilder。RequestBuilder中的load方法如下:

  public RequestBuilder<TranscodeType> load(@Nullable Uri uri) {
    return loadGeneric(uri);
  }

继续跟踪到loadGeneric里面:

private RequestBuilder<TranscodeType> loadGeneric(@Nullable Object model) {
    this.model = model;
    isModelSet = true;
    return this;
  }

通过isModelSet来判断load方法是否被调用,那为什么不直接判断model是否为null呢?类中已经给了解释:
这里写图片描述
那么接下来,我们看model用在什么地方呢?

  private Request obtainRequest(
      Target<TranscodeType> target,
      RequestListener<TranscodeType> targetListener,
      RequestOptions requestOptions,
      RequestCoordinator requestCoordinator,
      TransitionOptions<?, ? super TranscodeType> transitionOptions,
      Priority priority,
      int overrideWidth,
      int overrideHeight) {
    return SingleRequest.obtain(
        context,
        glideContext,
        model,
        transcodeClass,
        requestOptions,
        overrideWidth,
        overrideHeight,
        priority,
        target,
        targetListener,
        requestListener,
        requestCoordinator,
        glideContext.getEngine(),
        transitionOptions.getTransitionFactory());
  }

当然啦,这个方法是在into方法中调用的,所以放到下篇说啦,好滴,load()方法是不是要简单些呢,哈哈~~咪揪,下篇见Glide源码解析(三)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值