网络框架Volley原理分析
2016-02-24 14:16
411 查看
简介:Volley 是 Google 推出的
Android 异步网络请求框架和图片加载框架。在 Google I/O 2013 大会上发布。
Volley 的特点:特别适合数据量小,通信频繁的网络操作。
首先从与框架同名的Volley.java开始分析,文件位于toolbox。该类主要用于建立一个新的请求队列RequestQueue,方法有两个分别是:
?
1.传入Context时,调用newRequestQueue(context, null),然后根据DEFAULT_CACHE_DIR定义缓存文件名。
2.然后根据系统版本号,sdk大于9时使用HurlStack( HttpUrlConnection ),否则使用HttpClientStack( HttpClient ),然后将Stack传入Network,Network可以调用Stack处理请求,然后将结果转换成NetworkResponse
3.然后将定义的Network和缓存目录传入RequestQueue(Cache cache, Network network),根据默认的DEFAULT_NETWORK_THREAD_POOL_SIZE线程池大小常量去新建请求队列。
4.最后开启请求队列,执行start()方法,该方法会产生根据线程池大小产生对应数量的网络队列及缓存队列
5.创建完成一个请求队列后,每次调用只需要将自定义的Request通过add()方法传入,请求将会被添加到mCurrentRequests,该Set用于存储当前正在处理的请求,接着根据请求的shouldCache()方法判断是否需要进行缓存,如果不需要则直接放入网络队列,否则根据Url将请求放入缓存队列。
6.缓存调度器CacheDispatcher会从缓存队列中取出请求,然后根据CacheKey获取缓存,如果获取失败则放入网络队列中去处理,否则进行验证有效期等,最后将处理结果交由ResponseDelivery,他是返回结果分发接口,用于分发返回的结果
7.网络调度器NetworkDispatcher会从网络队列中取出请求,然后处理完成交由ResponseDelivery分发处理结果。
最后附上Volley的请求流程图
点击复制链接 与好友分享!
Android 异步网络请求框架和图片加载框架。在 Google I/O 2013 大会上发布。
Volley 的特点:特别适合数据量小,通信频繁的网络操作。
首先从与框架同名的Volley.java开始分析,文件位于toolbox。该类主要用于建立一个新的请求队列RequestQueue,方法有两个分别是:
?
2.然后根据系统版本号,sdk大于9时使用HurlStack( HttpUrlConnection ),否则使用HttpClientStack( HttpClient ),然后将Stack传入Network,Network可以调用Stack处理请求,然后将结果转换成NetworkResponse
3.然后将定义的Network和缓存目录传入RequestQueue(Cache cache, Network network),根据默认的DEFAULT_NETWORK_THREAD_POOL_SIZE线程池大小常量去新建请求队列。
4.最后开启请求队列,执行start()方法,该方法会产生根据线程池大小产生对应数量的网络队列及缓存队列
5.创建完成一个请求队列后,每次调用只需要将自定义的Request通过add()方法传入,请求将会被添加到mCurrentRequests,该Set用于存储当前正在处理的请求,接着根据请求的shouldCache()方法判断是否需要进行缓存,如果不需要则直接放入网络队列,否则根据Url将请求放入缓存队列。
6.缓存调度器CacheDispatcher会从缓存队列中取出请求,然后根据CacheKey获取缓存,如果获取失败则放入网络队列中去处理,否则进行验证有效期等,最后将处理结果交由ResponseDelivery,他是返回结果分发接口,用于分发返回的结果
7.网络调度器NetworkDispatcher会从网络队列中取出请求,然后处理完成交由ResponseDelivery分发处理结果。
最后附上Volley的请求流程图
点击复制链接 与好友分享!
相关文章推荐
- Comet:基于 HTTP 长连接的“服务器推”技术
- linux下socket编程-TCP
- PHP header函数设置http报文头示例详解以及解决http返回头中content-length与Transfer-Encoding: chunked的问题
- 使用ASIHTTPRequest的ASIDataCompressor与ASIDataDecompressor进行gzip压缩与解压缩,出现的问题
- Http协议中关于Content-Length的解读
- RuntimeException could not be mapped to a response, re-throwing to the HTTP container java.lang.Null
- 网络虚拟化是否需要额外的网络架构?
- iOS的TCP/IP协议族剖析&&Socket
- android 之TCP客户端编程
- 神经网络编程入门
- WIFI基本知识整理
- Android的三种网络通信方式
- HTTP请求报文和HTTP响应报文
- SYN flooding引发的网络故障
- SYN flooding引发的网络故障
- http.compression IIS
- TCP/IP、Http、Socket的区别
- 学习无线传感器网络该努力的方向?
- VBOX网络的设置
- TCP/UDP部分理解