接着上一篇Volley框架的使用,这一篇主要主要讲Volley框架运做的原理。主要使用流程图来叙述,简单的分析了整个流程的过程,具体的请参考源代码或者查看我上一篇在文章末尾添上的连接。html
1、Volley的准备缓存
生成一个RequestQueue的队列。网络
2、用户添加Request框架
3、阻塞线程spa
(1)缓存队列处理器.net
(2)网络请求处理器线程
4、数据分发器3d
做为网络回应的处理器htm
5、总结blog
1. 当一个RequestQueue被成功申请后会开启一个CacheDispatcher(缓存调度器)和4个(默认)NetworkDispatcher(网络请求调度器);
2. CacheDispatcher缓存调度器最为第一层缓冲,开始工做后阻塞的从缓存序列mCacheQueue中取得请求:
a. 对于已经取消了的请求,直接标记为跳过并结束这个请求
b. 全新或过时的请求,直接丢入mNetworkQueue中交由N个NetworkDispatcher进行处理
c. 已得到缓存信息(网络应答)却没有过时的请求,交由Request的parseNetworkResponse进行解析,从而肯定此应答是否成功。而后将请求和应答交由Delivery分发者进行处理,若是须要更新缓存那么该请求还会被放入mNetworkQueue中
3. 用户将请求Request add到RequestQueue以后:
a. 对于不须要缓存的请求(须要额外设置,默认是须要缓存)直接丢入mNetworkQueue交由N个NetworkDispatcher处理;
b. 对于须要缓存的,全新的请求加入到mCacheQueue中给CacheDispatcher处理
c. 须要缓存,可是缓存列表中已经存在了相同URL的请求,放在mWaitingQueue中作暂时雪藏,待以前的请求完毕后,再从新添加到mCacheQueue中;
4. 网络请求调度器NetworkDispatcher做为网络请求真实发生的地方,对消息交给BasicNetwork进行处理,一样的,请求和结果都交由Delivery分发者进行处理;
5. Delivery分发者实际上已是对网络请求处理的最后一层了,在Delivery对请求处理以前,Request已经对网络应答进行过解析,此时应答成功与否已经设定。然后Delivery根据请求所得到的应答状况作不一样处理:
a. 若应答成功,则触发deliverResponse方法,最终会触发开发者为Request设定的Listener
b. 若应答失败,则触发deliverError方法,最终会触发开发者为Request设定的ErrorListener
处理完后,一个Request的生命周期就结束了,Delivery会调用Request的finish操做,将其从mRequestQueue中移除,与此同时,若是等待列表中存在相同URL的请求,则会将剩余的层级请求所有丢入mCacheQueue交由CacheDispatcher进行处理。
借用了该博客的总结(http://blog.csdn.net/airk000/article/details/39003587)
========================================
做者:cpacm