Glide 原理 2 - load

幻昼 2024年04月07日 56次浏览

load 调用

with 之后,下一步就是 load,方法接受不同类型的参数,例如 URL、本地文件路径、资源 ID 等,用于指定要加载的图片资源。

  • 当调用 load() 方法时,Glide 会根据指定的资源创建一个请求对象 RequestBuilder
  • 该对象提供了许多配置选项,可以通过链式调用方法来配置加载选项,例如设置占位图、错误图、加载动画、缩放类型等。

活动图

Glide_load

源码分析

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


// 先跟进看 asDrawable 方法,最终返回一个 RequestBuilder
  public RequestBuilder<Drawable> asDrawable() {
    return as(Drawable.class);
  }

  public <ResourceType> RequestBuilder<ResourceType> as(
      @NonNull Class<ResourceType> resourceClass) {
    return new RequestBuilder<>(glide, this, resourceClass, context);
  }

// 接着调用 RequestBuilder 的 load 方法
  public RequestBuilder<TranscodeType> load(@Nullable Uri uri) {
    return maybeApplyOptionsResourceUri(uri, loadGeneric(uri));
  }

// 最后走到 loadGeneric
  private RequestBuilder<TranscodeType> loadGeneric(@Nullable Object model) {
    if (isAutoCloneEnabled()) {
      return clone().loadGeneric(model);
    }
    this.model = model;
    isModelSet = true;
    return selfOrThrowIfLocked();
  }