android常用框架

https://zhuanlan.zhihu.com/p/145940502


okhttp

Okhttp设计之初就是一个java平台通用的网络库,对于不同的java版本,还有安卓的底层适配逻辑是不同的。简单的说Okhttp就是抽象了下所有Tls,SSLSocket相关的代码,然后通过一个Platform,根据当前使用环境的不同,去反射调用不同的实现类,然后这个抽象的类去调用Platform的实现类代码,做到多平台的兼容。

其中Tls当生成好SSLSocket之后,就会开始进行client say hello 和server say hello的操作了,这部分完全和https定义的一模一样。Handshake则会把服务端支持的Tls版本,加密方式等都带回来,然后会把这个没有验证过的HandShake用X509Certificate去验证证书的有效性。然后会通过Platform去从SSLSocket去获取ALPN的协议支持信息,当后端支持的协议内包含Http2.0时,则就会把请求升级到Http2.0阶段。

OKHttp与HttpClient类似,也是一个Http客户端,提供了对 HTTP/2 和 SPDY 的支持,并提供了连接池,GZIP 压缩和 HTTP 响应缓存功能。

拦截器之间按照责任链模式顺序调用。

责任链模式:https://blog.csdn.net/qq_33768280/article/details/81384894

OkHttp优点

(1)支持HTTP2/SPDY

(2)拥有自动维护的socket连接池,减少握手次数,减少了请求延迟,共享Socket,减少对服务器的请求次数

(3)基于Headers的缓存策略减少重复的网络请求

(4)拦截器Interceptors(AOP实现)

OkHttp功能

(1)一般的get请求、post请求

(2)基于Http的文件上传下载

(3)加载图片

(4)支持session的保持

(5)支持自签名网站https的访问,提供方法设置下证书就行

(6)支持取消某个请求

okhttp的五大拦截器

RetryAndFollowUpInterceptor

是重试拦截器,是失败时重新开始的拦截器

利用while循环不停尝试,最大重试次数为20

BridgeInterceptor

是桥接拦截器

进一步封装Reponse对象

CacheInterceptor

缓存拦截器

有效地通过缓存减少网络请求的次数

判断是否需要返回缓存(即一般来说无网络就返回缓存)

有网络的情况下,判断返回的Response是否有更新,无更新就直接返回缓存,有更新就返回新的内容,并存入缓存。

ConnectInterceptor

连接拦截器,建立与服务器的连接

okhttp的连接是维护在一个连接池中的,

获取连接的流程:

如果能通过地址取到连接就返回,否则下一步

更换线路继续尝试获取连接,取到就返回,否则下一步

创建新的连接,建立与服务端的TCP连接

将新的连接加入连接池

CallServerInterceptor

网络请求连接器,负责向服务端发送数据

主要利用httpStream的readResponseHeaders()方法获取response


EventBus

使用发布订阅的事件总线,使代码解耦,使用观察者模式调用订阅者。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容