当运行的队列中的数值小于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(), Util.threadFactory(“OkHttp Dispatcher”, false));
SynchronousQueue 这个参数是线程池等待队列,
1:核心线程数 保持在线程池中的线程数量
2:线程池最大可容纳的线程数
3/4参数:当线程池中的线程数量大于核心线程数,空闲线程就会等待60s才会被终止,如果小于就会立刻停止;
okhttp完全流程
1:OkHttpClient okHttpClient = new OkHttpClient.Builder()
构建一个okhttpClient
对象,传入你想传入的对象,不传就是默认的;
2:构建request对象
Request 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
方法
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级安卓工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Android移动开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
结尾
好了,今天的分享就到这里,如果你对在面试中遇到的问题,或者刚毕业及工作几年迷茫不知道该如何准备面试并突破现状提升自己,对于自己的未来还不够了解不知道给如何规划,可以来看看同行们都是如何突破现状,怎么学习的,来吸收他们的面试以及工作经验完善自己的之后的面试计划及职业规划。
这里放上一部分我工作以来以及参与过的大大小小的面试收集总结出来的一套进阶学习的视频及面试专题资料包,在这里免费分享给大家,主要还是希望大家在如今大环境不好的情况下面试能够顺利一点,希望可以帮助到大家~
ps://bbs.csdn.net/topics/618156601),在这里免费分享给大家,主要还是希望大家在如今大环境不好的情况下面试能够顺利一点,希望可以帮助到大家~
[外链图片转存中…(img-GFtIKcL5-1711378034654)]