Android 谷歌 开源 通信框架 VOLLEY(五)——源码架构设计
来源:互联网 发布:网络直播都有什么内容 编辑:程序博客网 时间:2024/06/05 02:43
四、架构设计
我们已经知道了volley的种种功能,但是大家肯定不满足。volley是开源的,这就造福了亿万的程序员。
下面我们打开volley最后一层,深入架构设计。
当客户端在请求网络数据的时候,是需要消耗流量的,特别是对于移动端用户来说,对于流量的控制要求很高。所以在做网络请求的时候,如果对数据更新要求不是特别高,往往都会用到缓存机制,一方面能减少对服务端的请求,控制流量;另一方面,当客户端在没有网络的情况下也能看到上一次请求的数据,这样使用户体验更佳。
volley默认启用缓存的。
Volley请求流程如下:
蓝色部分代表主线程,
绿色部分代表缓存线程,
橙色部分代表网络线程。
我们在主线程中调用RequestQueue的add()方法来添加一条网络请求,这条请求会先被加入到缓存队列当中,如果发现可以找到相应的缓存结果就直接读取缓存并解析,然后回调给主线程。如果在缓存中没有找到结果,则将这条请求加入到网络请求队列中,然后处理发送HTTP请求,解析响应结果,写入缓存,并回调主线程。
缓存是否过期,通过 response 的头部信息:Cache-control字段和Expires、Date字段来判断。
如果是第一次请求,或者缓存已过期,肯定是无法获取到缓存的,这时可根据上图分析,将会进入网络请求线程NetworkDispatcher.
在网络请求线程请求到数据以后,会交给用户解析,并把数据转换一份成缓存数据,把数据缓存起来。
内部原理:RequestQueue会维护一个缓存调度线程(cache线程)和一个网络调度线程池(net线程)(注意,这是一池子线程),当一个Request被加到队列中的时候,cache线程会把这个请求进行筛选:如果这个请求的内容可以在缓存中找到,cache线程会亲自解析相应内容,并分发到主线程(UI)。如果缓存中没有,这个request就会被加入到另一个NetworkQueue,所有真正准备进行网络通信的request都在这里,第一个可用的net线程会从NetworkQueue中拿出一个request扔向服务器。当响应数据到的时候,这个net线程会解析原始响应数据,写入缓存,并把解析后的结果返回给主线程。
源码可以参考这里:
http://blog.csdn.net/fengqiaoyebo2008/article/details/42963915
http://blog.csdn.net/jxxfzgy/article/details/44088299
http://blog.csdn.net/guolin_blog/article/details/17656437
http://blog.csdn.net/geolo/article/details/43966171
http://www.w2bc.com/Article/20215
- Android 谷歌 开源 通信框架 VOLLEY(五)——源码架构设计
- Android 谷歌 开源 通信框架 VOLLEY(二)——String/Json处理
- Android 谷歌 开源 通信框架 VOLLEY(三)——图片加载处理
- Android 谷歌 开源 通信框架 VOLLEY(四)——定制请求
- Android 谷歌 开源 通信框架 VOLLEY(六)——应用实例
- Android网络通信Volley框架源码浅析(一)
- Android网络通信Volley框架源码浅析(二)
- Android网络通信Volley框架源码浅析(三)
- [置顶] Android网络通信Volley框架源码浅析(一)
- [置顶] Android网络通信Volley框架源码浅析(二)
- [置顶] Android网络通信Volley框架源码浅析(三)
- Android 谷歌 开源 通信框架 VOLLEY(一)
- Volley源码学习——打造网络通信框架
- Volley框架(五):Volley源码分析
- Android网络通信请求框架——Volley
- Android-Volley网络通信框架(volley 例子:电影列表)
- Android volley网络框架源码和架构分析
- android网络开源框架volley(五)——volley的一些细节
- 南邮 OJ 1342 皇后控制问题
- hdu 5324 Boring Class(树状数组+笛卡尔树 | 树状数组+cdq分治)
- ”高内聚 ,低耦合“到底是什么意思?
- Eclipse 项目导入 Android studio
- NGUI 对话系统
- Android 谷歌 开源 通信框架 VOLLEY(五)——源码架构设计
- 大讲台谈hive(初篇)
- 前端各种技术简介
- HDU 4497 GCD and LCM
- HDU 2899 Strange fuction
- powerDesigner自制的最简单的数据库表结构报告文档&表字段布局说明
- Flip Bits
- POJ 2247 Humble Numbers
- ExtJs 中 Ajax 连接超时设置与问题排查