Volley源码分析(五)Volley源码总结篇
volley关键的代码这里已经分析完了,下面梳理一下完整的Volley流程
Volley的使用从构造Request对象开始,Volley默认提供了四种request的实现,StringRequest,ImageRequest,JsonObjectRequest以及JsonArrayRequest。
这些request主要做的功能就是覆写deliverResponse方法,以及parseNetworkResponse,前者用来将结果交付到回调函数,后者用来定义如何去解析Volley封装后的NetWorkResponse。
然后在创建一个RequestQueue队列,将我们刚创建的request放入进入。
然后在回调方法中,就可以得到我们结果了。
Volley的关键就是RequestQueue,RequestQueue根据request的属性来决定将request给哪一个分发器,RequestQueue通过Volley.newRequestQueue来初始化1个CacheQueue以及4个NetWorkQueue。对于新加入的request,会判断该request是否需要缓存,默认是需要缓存的,如果不需要缓存则直接用NewWorkDispathcer对该request进行分发,需要缓存则会通过CacheQueue进行分发。
这两个分发器都是一个无限循环的Thread,不断处理队列中每一个Request。对于CacheDispatcher,会根据request中的cachekey来从Cache.Entity取出缓存的entity,然后验证缓存是否过期,如果过期就需要重新进行请求,如果没有过期,就直接用request去解析缓存的response,解析完以后,判断是否需要更新缓存,需要的话,就继续通过网络请求得到新的response。但不管需不需要,进行response交付的都是旧的缓存内容。判断需不需要更新缓存则是因为有些response会返回一个缓存过期可用时间,使得即使过期也可用。
这样,有缓存就从缓存取出,没有缓存的网络请求,网络请求是通过NetWorkDispatcher,对于Request,调用HttpStack进行请求,Android2.3以上就是HttpUrlConnection,以下就是HttpClient。而通过NetWork来封装一遍HttpStack,做的目的就是将response封装成NetWorkResponse,得到response以后,通过request去解析该response,并且根据需要来缓存他,全部处理完以后,将request,reponse进行结果交付,也就是最终调用我们构造request时,传入的回调方法。这样我们就能在UI线程中拿到response,完成Http请求。
最新文章
- C# 动态调用DLL库
- Java类的加载
- iOS开发小技巧--巧用ImageView中的mode(解决图片被拉伸的情况)
- Linux系统之压缩、解压缩,vi编辑器,系统初始化服务和系统监控
- ArcGIS API for Silverlight 点沿着线流动
- 《Effective C++》读书摘要
- jstree级联查找树
- Liferay IDE 3.1 M1发布啦
- [UML]UML之开篇
- 1056. Mice and Rice (25)
- tensorflow 保存变量,
- 【原创】FAT32系统硬盘的数据恢复实例,这篇文章也是从自己QQ空间的,转移过来的
- OpenSSL命令---rsa
- SQL Server Insert操作中的锁
- LNA
- JAVA基础--继承和权限控制
- java加密解密
- 网络硬盘NFS
- Android来电拦截及来电转移
- hibernate源码分析1