主要参与的是 OkHttpClient、request、call、RealCall、dispatcher、interceptors、response
通过builder创建OkHttpClient对象 设置一些属性 不设置的话会有默认值 举个例子的话 就有一些什么超时时间之类的 其实也能给设置一些拦截器、比如我们改的打印日志的东西
然后创建一个请求 就是request 包含你的请求地址 请求方式 header body 然后把这个请求变成call 通过newCall方法
然而实际上 newCall 里面就会调用realcall的newrealcall方法 realcall是call的实现类 call其实是个接口
它里面会有一些 执行请求的方法 取消的方法 还有请求结束的状态 等等 然后realcall实现了他的具体方法
比较重要的就是 execute和enqueue方法 前者是同步后者是异步 然后里面实际调用的client调用dispatcher的相应execute与enqueue方法 dispatcher里面有一些 装请求的队列 包括同步的正在执行的等待执行的 还有异步请求用到的线程池
大体逻辑就是 如果是同步请求 就直接把请求装到runningSyncCalls里面
在这个请求方法之外 就是关键的责任链调用了 无论哪种请求都会调用同一个启动责任链的方法 getResponseWithInterceptChain
它里面就是各种拦截器的链路执行了 主要由 RetryAndFollowUpInterceptor 是重连重定向拦截器 还有BridgeInterceptor 用于把我们写的request变成服务器接受的请求 反过来也一样 然后ConnectInterceptor 负责连接 CacheInterceptor 负责缓存 负责网络设置的networkInterceptor 和最终请求的Call ServerInterceptor 最终返回请求结果 response 异步的话 是根据正在执行的队列有没有空余 没有就放到等待队列 剩下差不多 同样的责任链