获取响应的数据
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
方法
**9:promoteCalls
方法中进行判断,
如果运行队列数目大于等于64,如果等待队列里啥都没有,也直接return?**
循环等待队列,将等待队列中的数据进行移除,移除是根据运行队列中还能存放多少来决定;移到了运行队列中,并且开始运行;
问题四: 如何考虑app的安全性
**1:**使用https协议进行交互
**2:**数据交互时,根据业务分出哪些是敏感信息,凡是敏感信息使用对称加密方式,如果是类似密码的,则使用不可逆的加密方式;md5
**3:**考虑跟钱相关,或者同等重要的数据接口,需要做多重验证,比如:前端加密请求参数,合并请求参数生成MD5码,服务器端做多重认证,最好能对比本地数据库或者缓存之类的信息;
要如何成为Android架构师?
搭建自己的知识框架,全面提升自己的技术体系,并且往底层源码方向深入钻研。
大多数技术人喜欢用思维脑图来构建自己的知识体系,一目了然。这里给大家分享一份大厂主流的Android架构师技术体系,可以用来搭建自己的知识框架,或者查漏补缺;
对应这份技术大纲,我也整理了一套Android高级架构师完整系列的视频教程,主要针对3-5年Android开发经验以上,需要往高级架构师层次学习提升的同学,在这里点击GitHub免费分享,希望能帮你突破瓶颈,跳槽进大厂;
最后我必须强调几点:
1.搭建知识框架可不是说你整理好要学习的知识顺序,然后看一遍理解了能复制粘贴就够了,大多都是需要你自己读懂源码和原理,能自己手写出来的。
2.学习的时候你一定要多看多练几遍,把知识才吃透,还要记笔记,这些很重要! 最后你达到什么水平取决你消化了多少知识
3.最终你的知识框架应该是一个完善的,兼顾广度和深度的技术体系。然后经过多次项目实战积累经验,你才能达到高级架构师的层次。
你只需要按照在这个大的框架去填充自己,年薪40W一定不是终点,技术无止境
2.学习的时候你一定要多看多练几遍,把知识才吃透,还要记笔记,这些很重要! 最后你达到什么水平取决你消化了多少知识
3.最终你的知识框架应该是一个完善的,兼顾广度和深度的技术体系。然后经过多次项目实战积累经验,你才能达到高级架构师的层次。
你只需要按照在这个大的框架去填充自己,年薪40W一定不是终点,技术无止境