接着上一篇Volley框架的使用,這一篇主要主要講Volley框架運作的原理。主要使用流程圖來敘述,簡單的分析了整個流程的過程,具體的請參考源代碼或者查看我上一篇在文章末尾添上的鏈接。
一、Volley的准備
生成一個RequestQueue的隊列。
二、用戶添加Request
三、阻塞線程
(1)緩存隊列處理器
(2)網絡請求處理器
四、數據分發器
作為網絡回應的處理器
五、總結
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
地址:http://www.cnblogs.com/cpacm/p/4211719.html