OkHttp请求流程图
我参考网上的博文okhttp请求完整流程图,绘制了一下OkHttp的大致流程图:
OkHttp流程分析
通过OkHttpClient.Builder
生成一个OkHttpClient
对象用于做http请求用,然后通过Request.Builder
生成一个包含目标参数的Request
网络请求对象,在OkHttpClient
对象调用newCall()
方法生成一个正式的请求RealCall
对象。此时有同步方法execute()
和异步方法enqueue()
两种发起请求的方式。
- 同步方法
execute()
内部直接调用RealCall
的getResponseWithInterceptorChain()
方法进入interceptors
的处理逻辑发起请求,最后返回Response
。 - 异步方法
enqueue()
内部会进入DIspatcher
,通过DIspatcher
的属性变量ExecutorService
对象执行AsyncCall
的run()
方法,然后进AsyncCall
的execute()
方法,然后调用RealCall
的getResponseWithInterceptorChain()
方法进入interceptors
的处理逻辑发起请求,最后返回Response
。
OkHttp中使用异步的小技巧
在源码中我发现了一个OkHttp中使用线程池执行异步任务的小技巧,就是线程池在执行线程的时候,将线程池作为参数传递到执行线程所在对象,主要可以在线程池执行线程异常时处理。
public final class Dispatcher {
........
void