本文主要是介绍OkHttp 3.x 源码解析之Dispatcher,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
tamic: / www.tamicer.com, 公众号:开发者技术前线
Dispatcher概念
Dispatcher中文是分发器的意思,和拦截器不同的是分发器不做Action事件处理,只做事件流向。在Okhttp中Dispatcher
负责将每一次Requst进行分发,压栈到自己的线程池,并通过调用者自己不同的方式进行异步和同步处理!
流程来向
接着上一章节我提到的拦截器概念,说明了okHttp每一次发起请求之前先进行Resqust构造,然后通过OkhttpClent进行构造真实的调用对象Call,接着执行者(Call )调用
enqueue()发起请求,下面再重复上一次代码!看着代码自己体会!
Request request =new Request.Builder().get().url(baseUrl).build();//ClientOkHttpClient client = new OkHttpClient();//创建的是一个RealCall对象final Call call = client.newCall(request);//异步调用call.enqueue(new Callback() {@Overridepublic void onFailure(Call call, IOException e) {}@Overridepublic void onResponse(Call call, Response response) throws IOException {Log.d("tamic", response.body().string());}});}
那么这个Dispatcher
和我们的以上说的这几个类Request
,OkHttpClient
,Call
有毛关系?
别急…..听我讲完 , goto!!!!
我们通过主动 通过关键字new
出OkHttpClient
的实例构造出一个Call
,而这个call通过自己的实现类,调用call.enqueue()
进行发起调用,就是这么一个call中实际上就包含了一个Client的引用,而这个引用包含一个
Dispatcher
成员变量,好了这个时候你已经明白了这东西怎么和ohttpclient
勾搭上关系的!
final class RealCall implements Call {final OkHttpClient client;final Request originalRequest;final boolean forWebSocket;// Guarded by this.private boolean executed;RealCall(OkHttpClient
这篇关于OkHttp 3.x 源码解析之Dispatcher的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!