Glide 是如何运作的,这篇3分钟看懂

Glide 是如何运作的,这篇3分钟看懂

流程

  1. with
    • 初始化glide,线程池(Engine)[默认使用GlideExecutor, 根据cpu计算线程数量,最小4个 ]
    • 监听生命周期和网络
  2. load 设置资源地址-资源的属性
  3. into 为target设置request, 加入线程池开始任务

如何回调

into方法
into(
        glideContext.buildImageViewTarget(view, transcodeClass),
        /*targetListener=*/ null,
        requestOptions,
        Executors.mainThreadExecutor());

关键地方在最后一个参数, 主线程执行

private static final Executor MAIN_THREAD_EXECUTOR =
  new Executor() {
    private final Handler handler = new Handler(Looper.getMainLooper());

    @Override
    public void execute(@NonNull Runnable command) {
      handler.post(command);
    }
  };

网络下载在哪里

DecodeJob

这个是一个Runnable的任务, 我们看看run方法, 主要是runWrapped()

private void runWrapped() {
  switch (runReason) {
    case INITIALIZE:
      //初始化
      stage = getNextStage(Stage.INITIALIZE);
      currentGenerator = getNextGenerator();
      runGenerators();
      break;
    case SWITCH_TO_SOURCE_SERVICE:
      //获取资源(网络/本地)
      runGenerators();
      break;
    case DECODE_DATA:
      //解析资源(bitmap/drawable等等)
      decodeFromRetrievedData();
      break;
    default:
      throw new IllegalStateException("Unrecognized run reason: " + runReason);
  }
}
generator

有以下这几种生成器

private DataFetcherGenerator getNextGenerator() {
    switch (stage) {
      case RESOURCE_CACHE:
        //已经修改过的缓存, 加载到view的
        //from cache files containing downsampled/transformed resource data.
        return new ResourceCacheGenerator(decodeHelper, this);
      case DATA_CACHE:
        //原图资源缓存
        //from cache files containing original unmodified source data.
        return new DataCacheGenerator(decodeHelper, this);
      case SOURCE:
        //源资源
        //from original source data using registered {@link com.bumptech.glide.load.model.ModelLoader ModelLoaders} and the model provided for the load.
        return new SourceGenerator(decodeHelper, this);
      case FINISHED:
        return null;
      default:
        throw new IllegalStateException("Unrecognized stage: " + stage);
    }
  }
网络请求处理
  • HttpUrlFetcher: HttpURLConnection
  • OkHttpStreamFetcher: OkHttp
解析网络数据

ResourceDecoder

有很多种解析器, 主要将网络数据decode成bitmap/drawable, 用于显示.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值