深入理解Glide源码:三条主线分析-Glide-执行流程

Glide流程分析

说到图片加载框架,大家最熟悉的莫过于Glide了,但我却不推荐简历上写熟悉Glide, 除非你熟读它的源码,或者参与Glide的开发和维护。然而很多小伙伴对于Glide的流程及其源码解读总是无从下手,本篇就从三条主线来分析一下Glide流程及源码!

第一条主线

加入队列流程:

RequestManager with = Glide.with(this);
RequestBuilder<Drawable> load = with.load(url);
load.into(iv);   // 前面的暂时先不看,当调用into方法后,说明加载图片的请求才真正开始

继续调用

return into(
    glideContext.buildImageViewTarget(view, transcodeClass),
    /*targetListener=*/ null,
    requestOptions);

继续跟踪,会发现以下代码

requestManager.clear(target);
target.setRequest(request);
requestManager.track(target, request);//发送请求开始的地方
void track(Target<?> target, Request request) {
   
  targetTracker.track(target);
  requestTracker.runRequest(request);//从名字看叫运行请求
}

继续跟踪

通过该方法得知Glide也有两个队列;运行队列和等待队列;
public void runRequest(Request request) {
   
  requests.add(request);//加入运行队列;
  if (!isPaused) {
   
    request.begin();//开始执行
  } else {
   
    pendingRequests.add(request);//加入等待队列
  }
}

第二条主线

请求如何运行?

在第一条主线中,request.begin()方法就是真正开始执行请求的时候;先找到request的实现类:SingleRequest,找到其begin方法;

为什么找到的是SingleRequest?

在第一条主线的RequestBuilder.into方法中有一句代码;

Request request = buildRequest
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值