OkHttp源码分析总结
2019-01-09 本文已影响0人
陈超_
先讲述一下Okhttp的如何使用。
创建一个OkhttpClient,一个Request。通过Client调用newCall方法,传入Request。返回一个Call对象,然后通过Call对象可以执行同步或者异步请求。最后返回请求后的回调
OkhttpClient可以设置连接超时时长,读取超时时长等信息,Request可以设置Url,以及请求头等信息。
在newCall以后返回的是一个Call对象。查看源码以后可以知道Call是一个接口,而真正实现方法的是RealCall这个子类
Call执行同步excute方法
先判断Call是否已经被执行,如果已经执行过那么会直接抛出异常,否则添加到同步队列当中
拦截器链获取http响应
Call执行异步enqueue方法
第一步也是先判断Call是否被执行
然后创建一个实现了Runnable的AsyncCall实现类,添加到队列当中。
添加的时候会去判断队列是否已经是最大的请求数,如果已经超过了请求数,那么会添加到等待的队列当中。如果没有超过,则直接添加到运行中的队列
在执行完异步请求以后,会dispatch会执行finish,移除掉这个call,然后执行promoteCalls()方法,去判断等待执行的队列是否还有任务,并且没有超过请求书,如果满足继续执行请求