1. newCall(Request)方法会返回一个RealCall对象,它是Call接口的实现。当调用 RealCall.execute() 的时候,RealCall.getResponseWithInterceptorChain()会被调用,它会发起网络请求并拿到返回的响应,装进一个Response对象并作为返回值返回;RealCall.enqueue()被调用的时候大同小异,区别在于enaueue()会使用Dispatcher的线程池来把请求放在后台线程进行,但实质上使用的同样也是 getResponseWithInterceptorChain()方法。
2. getResponseWithInterceptorChain()方法做的事:把所有配置好的 Interceptor放在一个List里,然后作为参数,创建一个RealInterceptorChain对象,并调用chain.proceed(request)来发起请求和获取响应。
3. 在RealInterceptorChain中,多个 Interceptor会依次调用自己的intercept()方法。这个方法会做三件事:
当然了,最后一个Interceptor的任务只有一个:做真正的网络请求并拿到响应
a. 1.对请求进行预处理
b. 2、预处理之后,重新调用RealIntercepterChain.proceed()把请求交给下一个Interceptor
c. 3、在下一个Interceptor处理完成并返回之后,拿到Response进行后续处理
4. 从上到下,每级Interceptor 做的事:
a. o首先是开发者使用 addInterceptor(
okhttp执行流程
最新推荐文章于 2023-03-29 17:46:44 发布