对于OkHttp整体框架的介绍,网上的文章有很多,同时也配有一些图解(当然很多都是一样的就是了),总体上我和大家的理解也是相近的。但是呢,我觉得还不够具体也不够完善,因为我想知道,如果我自己要实现一个HttpClient到底要做到什么程度?所以我希望能更加详细地去理解OKHttp的设计和实现。
下面这幅是我自己描绘的OkHttp框架层次图(图比较大可能需要鼠标左键图片才能看清楚):
下面先来简单介绍一下OkHttp的各个层次,后面会有更加详细的文章专门去解读它们。
OkHttpClient
OkHttpClient在一个应用往往只会创建一个单例。
对外主要是两个功能:一个是可配置,比如你可以设置超时时间,配置自定义的CookieJar实现,配置多个自定义的Interceptor实现,添加事件监听等等;另外一个是提供newCall API,我们用的最多也是这个API。
对内它的配置会被全局范围内使用,同时也负责创建和管理一些全局单例对象,比如Dispatcher、ConnectionPool等。
所以OkHttpClient有点类似一个全局的应用上下文。
Dispatcher
Dispatcher主要管理异步请求任务策略,负责分配异步线程资源,控制异步连接数,只覆盖线程资源层面的逻辑,往下的执行过程对其来说是透明的。
而对于同步任务,Dispatcher只是简单