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请求。

最新文章

  1. C# 动态调用DLL库
  2. Java类的加载
  3. iOS开发小技巧--巧用ImageView中的mode(解决图片被拉伸的情况)
  4. Linux系统之压缩、解压缩,vi编辑器,系统初始化服务和系统监控
  5. ArcGIS API for Silverlight 点沿着线流动
  6. 《Effective C++》读书摘要
  7. jstree级联查找树
  8. Liferay IDE 3.1 M1发布啦
  9. [UML]UML之开篇
  10. 1056. Mice and Rice (25)
  11. tensorflow 保存变量,
  12. 【原创】FAT32系统硬盘的数据恢复实例,这篇文章也是从自己QQ空间的,转移过来的
  13. OpenSSL命令---rsa
  14. SQL Server Insert操作中的锁
  15. LNA
  16. JAVA基础--继承和权限控制
  17. java加密解密
  18. 网络硬盘NFS
  19. Android来电拦截及来电转移
  20. hibernate源码分析1

热门文章

  1. Nodejs+Express构建网站
  2. 微信小程序开发资料汇总
  3. C# 导出Excel表格
  4. SQL Server T—SQL 视图 事务
  5. 撩课-Web大前端每天5道面试题-Day36
  6. 快速导出云服务器mysql的表数据
  7. 转载 - java中接口的向上转型。和多态性
  8. 【10-2】复杂业务状态的处理(从状态者模式到FSM)
  9. 在Oracle中实现每日表备份并删除7天前的备份表
  10. python内置函数每日一学 -- all()