Volley源码分析(五)Volley源码总结篇

volley关键的代码这里已经分析完了,下面梳理一下完整的Volley流程缓存

Volley的使用从构造Request对象开始,Volley默认提供了四种request的实现,StringRequest,ImageRequest,JsonObjectRequest以及JsonArrayRequest。网络

这些request主要作的功能就是覆写deliverResponse方法,以及parseNetworkResponse,前者用来将结果交付到回调函数,后者用来定义如何去解析Volley封装后的NetWorkResponse。
而后在建立一个RequestQueue队列,将咱们刚建立的request放入进入。函数

而后在回调方法中,就能够获得咱们结果了。spa

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

相关文章
相关标签/搜索