Volley框架的流程圖分析

jopen 9年前發布 | 55K 次閱讀 Volley Android開發 移動開發

接著上一篇Volley框架的使用,這一篇主要主要講Volley框架運作的原理。主要使用流程圖來敘述,簡單的分析了整個流程的過程,具體的請參考源代碼或者查看我上一篇在文章末尾添上的鏈接。

一、Volley的準備

生成一個RequestQueue的隊列。

Volley框架的流程圖分析

二、用戶添加Request

Volley框架的流程圖分析

三、阻塞線程

(1)緩存隊列處理器

Volley框架的流程圖分析

(2)網絡請求處理器

Volley框架的流程圖分析

四、數據分發器

作為網絡回應的處理器

Volley框架的流程圖分析

五、總結

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

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!