okhttp流程 原理 关键类
okhttp 关键类
OKHttpClient Request Call-RealCall.enqueue
synchronized (this) {
if (executed) throw new IllegalStateException("Already Executed");
executed = true;
}
synchronized void enqueue(AsyncCall call) {
当运行的队列中的数值小于64, 并且同时访问同一个机器目标HOST请求书小于5直接加入到运行队列,不然的话就加入到等待队列
if (runningAsyncCalls.size() < maxRequests && runningCallsForHost(call) < maxRequestsPerHost) {
runningAsyncCalls.add(call);
executorService().execute(call);
} else {
readyAsyncCalls.add(call);
}
}
Response response = getResponseWithInterceptorChain();
获取响应的数据
okhttp基本流程
1: 先搞懂责任链是个啥?基于责任链搞清楚reponse
?okhttp
2:搞清楚拦截器
-
重试/重定向:
-
桥拦截器:封装header属性 host keep-live gzip header 进行基本设置,
-
缓存拦截器
-
连接拦截器
- CallServerInterceptor
executorService = new ThreadPoolExecutor(0, Integer.MAX_VALUE, 60, TimeUnit.SECONDS,
new SynchronousQueue<Runnable>(), Util.threadFactory("OkHttp Dispatcher", false));
SynchronousQueue<Runnable> 这个参数是线程池等待队列,
1:核心线程数 保持在线程池中的线程数量
2:线程池最大可容纳的线程数
3/4参数:当线程池中的线程数量大于核心线程数,空闲线程就会等待60s才会被终止,如果小于就会立刻停止;
okhttp完全流程
1:OkHttpClient okHttpClient = new OkHttpClient.Builder()
构建一个okhttpClient
对象,传入你想传入的对象,不传就是默认的;
2:构建request对象
R
equest request = new Request.Builder()
3:okHttpClient.newCall
?实际上返回的realCall
类 继续调用RealCall.newRealCall
4:调用enqueue
方法,传入我们需要的回调接口,而且会判断,
synchronized (this) {
if (executed) throw new IllegalStateException("Already Executed");
executed = true;
}
如果当前这个call对象已经被运行的话,则抛出异常;
**5:继续调用dispatcher的enqueue
方法,如果当前运行队列<64并且正在运行,访问同一个服务器地址的请求<5
就直接添加到运行队列,并且开始运行;
不然就添加到等待队列;**
6:运行AsyncCall
,调用它的execute方法
7:在execute
方法中处理完response
之后,会在finally
中调用dispathcer
的finished方法;
8:当当前已经处理完毕的call从运行队列中移除掉;并且调用promoteCalls
方法
**9:promoteCalls
方法中进行判断,
如果运行队列数目大于等于64,如果等待队列里啥都没有,也直接return?**
循环等待队列,将等待队列中的数据进行移除,移除是根据运行队列中还能存放多少来决定;移到了运行队列中,并且开始运行;
最后
我的面试经验分享可能不会去罗列太多的具体题目,因为我依然认为面试经验中最宝贵的不是那一个个具体的题目或者具体的答案,而是结束面试时,那一刻你的感受以及多天之后你的回味~
很多人在刚接触这个行业的时候或者是在遇到瓶颈期的时候,总会遇到一些问题,比如学了一段时间感觉没有方向感,不知道该从那里入手去学习,对此我整理了一些资料,需要的可以免费分享给大家
在这里小编分享一份自己收录整理上述技术体系图相关的几十套腾讯、头条、阿里、美团等公司的面试题,把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。
【Android核心高级技术PDF文档,BAT大厂面试真题解析】
【算法合集】
【延伸Android必备知识点】
【Android部分高级架构视频学习资源】
Android精讲视频领取学习后更加是如虎添翼!进军BATJ大厂等(备战)!现在都说互联网寒冬,其实无非就是你上错了车,且穿的少(技能),要是你上对车,自身技术能力够强,公司换掉的代价大,怎么可能会被裁掉,都是淘汰末端的业务Curd而已!现如今市场上初级程序员泛滥,这套教程针对Android开发工程师1-6年的人员、正处于瓶颈期,想要年后突破自己涨薪的,进阶Android中高级、架构师对你更是如鱼得水,赶快领取吧!