OkHttp源码解析
一、OkHttp使用简介
1.创建一个OkHttpClient对象
2.创建一个request对象,通过内部类Builder调用生成Request对象
3.创建一个Call对象,调用execute(同步)/enqueue(异步)
同步:
异步:
二、OkHttp源码分析
可见Interceptor(拦截器)是 OkHttp 最核心的一个东西,不要误以为它只负责拦截请求进行一些额外的处理(例如 cookie),实际上它把实际的网络请求、缓存、透明压缩等功能都统一了起来,每一个功能都只是一个Interceptor,它们再连接成一个Interceptor.Chain,环环相扣,最终圆满完成一次网络请求。
总结:
·OkHttpClient实现Call.Factory,负责为Request创建Call;
·RealCall为具体的Call实现,其enqueue()异步接口通过Dispatcher利用ExecutorService实现,而最终进行网络请求时和同步execute()接口一致,都是通过getResponseWithInterceptorChain()函数实现;
·getResponseWithInterceptorChain()中利用Interceptor链条,分层实现缓存、透明压缩、网络 IO 等功能;