接着上一篇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