Volley源碼分析(五)Volley源碼總結篇

volley關鍵的代碼這裏已經分析完了,下面梳理一下完整的Volley流程緩存

Volley的使用從構造Request對象開始,Volley默認提供了四種request的實現,StringRequest,ImageRequest,JsonObjectRequest以及JsonArrayRequest。網絡

這些request主要作的功能就是覆寫deliverResponse方法,以及parseNetworkResponse,前者用來將結果交付到回調函數,後者用來定義如何去解析Volley封裝後的NetWorkResponse。
而後在建立一個RequestQueue隊列,將咱們剛建立的request放入進入。函數

而後在回調方法中,就能夠獲得咱們結果了。spa

Volley的關鍵就是RequestQueue,RequestQueue根據request的屬性來決定將request給哪個分發器,RequestQueue經過Volley.newRequestQueue來初始化1個CacheQueue以及4個NetWorkQueue。對於新加入的request,會判斷該request是否須要緩存,默認是須要緩存的,若是不須要緩存則直接用NewWorkDispathcer對該request進行分發,須要緩存則會經過CacheQueue進行分發。線程

這兩個分發器都是一個無限循環的Thread,不斷處理隊列中每個Request。對於CacheDispatcher,會根據request中的cachekey來從Cache.Entity取出緩存的entity,而後驗證緩存是否過時,若是過時就須要從新進行請求,若是沒有過時,就直接用request去解析緩存的response,解析完之後,判斷是否須要更新緩存,須要的話,就繼續經過網絡請求獲得新的response。但無論需不須要,進行response交付的都是舊的緩存內容。判斷需不須要更新緩存則是由於有些response會返回一個緩存過時可用時間,使得即便過時也可用。對象

這樣,有緩存就從緩存取出,沒有緩存的網絡請求,網絡請求是經過NetWorkDispatcher,對於Request,調用HttpStack進行請求,Android2.3以上就是HttpUrlConnection,如下就是HttpClient。而經過NetWork來封裝一遍HttpStack,作的目的就是將response封裝成NetWorkResponse,獲得response之後,經過request去解析該response,而且根據須要來緩存他,所有處理完之後,將request,reponse進行結果交付,也就是最終調用咱們構造request時,傳入的回調方法。這樣咱們就能在UI線程中拿到response,完成Http請求。blog

相關文章
相關標籤/搜索