如果本文幫助到你,本人不勝榮幸,如果浪費了你的時間,本人深感抱歉。 希望用最簡單的大白話來幫助那些像我一樣的人。如果有什麼錯誤,請一定指出,以免誤導大家、也誤導我。 本文來自:www.jianshu.com/users/320f9… 感謝您的關注。
一直聽說 Volley 原始碼寫的非常精妙,對於高併發處理非常不錯。 研究一番之後,發現確實不錯。
先說一說我是怎麼看 Volley 的原始碼的。
- 首先,自己先研究一遍原始碼,從 Volley 入手,看了個遍,基本上佔了一半的時間;
- 然後根據Volley 原始碼解析,在重新看一遍程式碼(佔剩餘時間的三分之二);
- 看完之後,自己再拋開文章,自己重新看一遍程式碼;
- 根據思路,寫下看完之後的理解。
Volley 原始碼解析 這篇文章對 Volley 整個專案介紹的非常詳細,以及流程圖也做的非常清晰,非常有利於結合起來一起看。
針對於 Volley 的原始碼解析文章特別的多,而且基本都寫的不錯,如果再寫一遍跟抄襲差不多,所以我還是隻寫出自己看完之後的理解總結。 雖然,寫出來好像沒什麼,但是其中滋味,看完之後 真的會有另一番味道。
Volley 整體流程圖
RequestQueue 工作流程:
CacheDispatcher(無限迴圈):快取排程
-
先看快取有沒有; 若沒有,則將其加入Network 工作佇列。
-
若有,看快取是否過期; 若過期,則將其加入Network 工作佇列。
-
若沒過期,則返回 Response,不進行網路請求。
NetworkDispatcher(無限迴圈):網路排程
-
檢視請求是否被取消; 若取消,則結束這次請求,開始下一次迴圈,執行下一個請求。
-
沒有取消,檢視請求的地址是否有相應; 無響應,則結束這次請求,開始下一次迴圈,執行下一個請求。
-
有響應,則用 Network 進行 request 的請求,返回 Response;
-
是否需要快取; 需要,則存入Cache。 不需要,則繼續往下。
-
返回給 ResponseDelivery 。
> **個人理解:** > 兩個迴圈均是無限迴圈;
互相存入或獲取;
兩者互相配合,使網路頻繁請求更加高效。
大家去看原始碼時,以此 為主線去看原始碼裡面的一些東西,相信可以理解的更快一些。
關於 Volley 的框架結構
關於這張圖,估計只有我能看懂吧, 哈哈哈....
這個是看第一遍的時候,邊看邊畫的,所以不太清晰。
這張圖是以 Network 為主線。 而 Volley 的整體設計應該是以 Request 為主線。
因為斷斷續續看了兩三天,所以記憶比較深,在此寫下思路,以便後來複習時,能夠快速建立當時腦中的邏輯模型。
推薦文章:Volley 原始碼解析
OK。 如果本文有什麼問題,請一定指出。 O(∩_∩)O