Android网络框架-Volley(二) RequestQueue源码分析以及建立一个RequestQueue

从上一篇文章我们可以知道,Volley的整个工作都是建立在一个RequestQueue上的,所以理解RequestQueue对于我们使用Volley是很有必要的,上一篇文章的例子中,我们使用Volley.newRequestQueue()创建了一个RequestQueue实例,那么我们就先来看一看Volley是怎么把RequestQueue创建出来的吧。

通过分析Volley类的源码,我们可以发现Volley在创建网络连接的时候是非常讲究的,我们想想自己原来在建立网络连接的时候,有没有考虑过HttpClient选择的问题。毕竟Volley是Google工程师开发出的框架,他们对自己的产品最熟悉.
我们再来看一下RequestQueue的源码
总结:
1.在调用Volley.newInstance()之后,就会调用到RequestQueue中的start()方法,RequestQueue中start()方法会调用CacheDispatcher和NetworkDispatcher的start()方法,将缓存管家和网络管家启动起来。
2.在调用add()方法后,一个request就传进来了,给他设置两个标识,一个是它属于这个requestQueue处理,另一个是一个单调递增的TAG。
3.将这个request添加到mCurrentRequests中,这是一个set,如果mCurrentRequests中已经有了这个request,那么它自然是加不进去的,作为重复的request来处理
4.处理重复request。获得这个request的url地址
    4.1.如果这个url地址之前被缓存过并且存在存储这个相同request的一个链表,那么就将这个request添加到这个链表中,否则新建一个链表。
    4.2.如果这个url地址之前没被缓存过,那么就将url作为键,null作为值插入到这个map中。下一次的时候,就会进行4.1了。
我们可以在项目中的任何地方新建一个RequestQueue,再新建一个Request,add到RequestQueue中后就可以工作了,但是如果我们项目中很多地方都要用到网络请求,那么在很多地方都新建一个RequestQueue肯定是不好的,所以,在使用Volley的时候,我们把RequestQueue设置为全局单例的。
这样,我们的标准RequestQueue全局单例实例就已经创建好了,我们可以在需要访问网络的地方直接调用AppController.getInstance().addToRequestQueue()就可以开始工作了。
最后在清单文件中将AppController注册进去并且添加网络权限






你可能感兴趣的:(android,Volley)