Volley小記

   閱讀Volley源碼快有一週時間了,從最初的不知從何看起,到後來的大致瞭解,這是一個漫長的過程。下面就對觀看心得做一個小結,以後會有更多的需要閱讀源碼,希望這次積累的經驗對今後閱讀源碼、技術文檔產生幫助。

   在查看框架的源碼時,最重要的是先找准入口,就像一個迷宮,如果入口都找不到,根本就無法找到正確的道路,通過迷宮。而尋找入口的方法很簡單,就是我們在使用這個框架時,第一行寫的代碼,這就是我們要找的入口。

例如使用Volley時,我們第一行代碼是:

RequestQueue requestQueue=Volley.newRequestQueue(this);

StringRequest stringRequest=new StringRequest(......)

requestQueue.add(stringRequest);

   因此Volley框架的入口就是Volley.newRequestQueue(this);

   這會生成一個RequestQueue(請求隊列)的實例,並把請求添加到隊列中。同時會有兩個調度員線程,分別是CacheDispatcherNetworkDispatcher,這兩個線程在後臺一直運行,輪訓是否有待處理的請求,如果有就處理,否則就阻塞。

   其中有一個重要的接口就是HttpStack,這是用來處理用戶請求Request的接口,它有兩個實現類,分別是HurlStackHttpClientStack。由於Android Api 9(Android 2.3.2)之後不支持HttpClient,爲了向下兼容,HurlStack是基於HttpUrlConnection建立連接,而HttpClientStack是基於HttpClient建立連接。而NetWork通過HttpStack處理請求,並返回處理結果。

   一.當請求需要緩存時,把請求交給緩存調度員CacheDispatcherCacheDispatcher根據請求url獲取緩存結果。(1).緩存信息爲空,說明找不到緩存信息

(沒有緩存信息的兩種原因:

1.第一次處理這個請求

2.不是第一次處理這個請求,但是緩存已過期

(緩存過期也分爲:完全過期和軟過期。完全過期是指真正的過期,軟過期是指再過一會就要過期了)

),因爲緩存過期了,所以需要通過網絡處理請求url。並將請求的結果添加到緩存,方便下次使用,並將處理結果返回給調用者。(2).否則,從緩存獲取結果並返回給調用者。

二.不需要緩存,把請求交給網絡調度員NetworkDispatcher,並將結果返回給調用者

Volley的大致處理流程就是這樣的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章