尊重原創
從今天開始,我打算為大家呈現關于Volley架構的源碼分析的文章,Volley架構是Google在2013年釋出的,主要用于實作頻繁而且粒度比較細小的Http請求,在此之前Android中進行Http請求通常是使用HttpUrlConnection和HttpClient進行,但是使用起來非常麻煩,而且效率比較地下,我想谷歌正式基于此種原因釋出了Volley架構,其實出了Volley架構意外,也有一些http請求開源項目,比如使用比較廣泛的有async-http,UniversImageLoader等等,其中async-http主要用來實作異步http請求,而後者主要用來請求圖檔。Volley具有以上兩種架構的功能,并且是Google公司釋出,我想作為Android開發者,很有必要研究一下該架構。
1、下載下傳Volley架構
git clone https://android.googlesource.com/platform/frameworks/volley
2、引用Volley架構
引用該架構的方式主要有兩種:
(1):直接導入Volley架構,作為lib使用
(2):編譯Volley成jar包
3、Volley的功能:
前面已經提及了Volley是一個用于http請求的架構,其主要功能如下:
json,xml,String,Image等資源的請求,當然我們還可以根據自己的需要來改寫Volley架構源碼,進而實作自己的功能
4、Volley源碼分析
溫馨提醒:如果是第一次看Volley源碼,第一遍沒看懂沒關系,将源碼copy下來,跟着我的思路慢慢分析,将文章從頭到後多看幾遍就ok了,因為Volley的一些關鍵類都互相應用,我隻能一個一個的分析了,等你看完我所有的文章,然後再從頭看一變,相信你定有所收獲
當然閱讀次文章之前,最好學會知道Volley架構的基本使用,由于網絡上很多類似的教程,我在此處就不再描述了,後期如果有時間我也會講解一下Volley的應用
我們就從Volley這個類開始吧
(1) Volley.java
Volley類主要用來建立一個請求隊列,我們的任何請求(請求字元串,json,xml)都放入到這個隊列中(其實裡面有兩個隊列,後面我們慢慢學習,暫時簡單了解為一個)。建立完隊列後,調用start方法,就會啟動一些線程(暫時不關注多少條線程),不斷監聽隊裡裡面是否有請求,如果有請求則執行http請求,在2.3之前的版本中,Http請求是通過httpClient實作,在2.3以後的版本中是通過HttpURLConnection實作,因為在2.3之前的版本中HttpRlConnection非常不穩定
(2) HttpStack.java
下面看看HttpStack是何方神聖
直接檢視它的子類方法吧
首先看 HurlStack.java類
這個類是基于HttpURLConnection實作的
由于這個類比較長,我就重點講解一下
(3) HurlStack.java
(4) HttpClientStack.java
看到這裡大家肯定覺得這個架構也沒有什麼了不起嘛,和使用HttpURLConnection和HttpClient差不多嘛,如果你真的這樣覺得那麼你就大錯特錯了,其實這個架構的核心在于線程的排程和緩存上面,後期我們會介紹的
回到Volley類,我們看下一個陌生的類就是Network,其實Network不過是個接口而已,它的實作類是BaskNetwork
(5) BaskicNetwork.java
從名字我們就可以看出來,這個類就是進行網絡請求的,其實他就是對HttpurlStack或者HttpClientStack的一個封裝,真正實作請求的還是上面兩個類。
最核心的方法:
這個方法調用了mHttpStack的同名方法,隻不過在mHttpStack中傳回的是HttpResponse,在這裡傳回的是NetworkResponse。
然後再看看本篇文章的最後一個類:
RequestQueue.java
我保留了一些關鍵字段,删除不影響了解的字段
寫到這裡先高一段落吧,來個小小的總結:Volley中有一個RequestQueue(包含本地隊列和網絡隊列),就是請求隊列,每一個http請求都被封裝成了一個Request,通過隊列的add方法加入隊列,如果一個Request可以緩存,那麼先加入本地隊列,如果不能緩存則加入網絡隊列
待續。。。。。。。
歡迎留言讨論。。。