Volley 原始碼探索

Wing_Li發表於2018-11-06

如果本文幫助到你,本人不勝榮幸,如果浪費了你的時間,本人深感抱歉。 希望用最簡單的大白話來幫助那些像我一樣的人。如果有什麼錯誤,請一定指出,以免誤導大家、也誤導我。 本文來自:www.jianshu.com/users/320f9… 感謝您的關注。

一直聽說 Volley 原始碼寫的非常精妙,對於高併發處理非常不錯。 研究一番之後,發現確實不錯。


先說一說我是怎麼看 Volley 的原始碼的。

  1. 首先,自己先研究一遍原始碼,從 Volley 入手,看了個遍,基本上佔了一半的時間;
  1. 然後根據Volley 原始碼解析,在重新看一遍程式碼(佔剩餘時間的三分之二);
  2. 看完之後,自己再拋開文章,自己重新看一遍程式碼;
  3. 根據思路,寫下看完之後的理解。

Volley 原始碼解析 這篇文章對 Volley 整個專案介紹的非常詳細,以及流程圖也做的非常清晰,非常有利於結合起來一起看。

針對於 Volley 的原始碼解析文章特別的多,而且基本都寫的不錯,如果再寫一遍跟抄襲差不多,所以我還是隻寫出自己看完之後的理解總結。 雖然,寫出來好像沒什麼,但是其中滋味,看完之後 真的會有另一番味道。


Volley 整體流程圖

Volley 原始碼探索

RequestQueue 工作流程:

CacheDispatcher(無限迴圈):快取排程
  1. 先看快取有沒有; 若沒有,則將其加入Network 工作佇列。

  2. 若有,看快取是否過期; 若過期,則將其加入Network 工作佇列。

  3. 若沒過期,則返回 Response,不進行網路請求。

NetworkDispatcher(無限迴圈):網路排程
  1. 檢視請求是否被取消; 若取消,則結束這次請求,開始下一次迴圈,執行下一個請求。

  2. 沒有取消,檢視請求的地址是否有相應; 無響應,則結束這次請求,開始下一次迴圈,執行下一個請求。

  3. 有響應,則用 Network 進行 request 的請求,返回 Response;

  4. 是否需要快取; 需要,則存入Cache。 不需要,則繼續往下。

  5. 返回給 ResponseDelivery 。


> **個人理解:** > 兩個迴圈均是無限迴圈;
互相存入或獲取;
兩者互相配合,使網路頻繁請求更加高效。

大家去看原始碼時,以此 為主線去看原始碼裡面的一些東西,相信可以理解的更快一些。


關於 Volley 的框架結構

關於這張圖,估計只有我能看懂吧, 哈哈哈....

這個是看第一遍的時候,邊看邊畫的,所以不太清晰。

這張圖是以 Network 為主線。 而 Volley 的整體設計應該是以 Request 為主線。

Volley 原始碼探索


因為斷斷續續看了兩三天,所以記憶比較深,在此寫下思路,以便後來複習時,能夠快速建立當時腦中的邏輯模型。

推薦文章:Volley 原始碼解析

OK。 如果本文有什麼問題,請一定指出。 O(∩_∩)O

相關文章