Volley 框架java
(我的理解,不須要看。只是爲了總結。)android
Com.android.volley 框架部分緩存
Com.android.volley.toolbox 實現部分服務器
先從框架看吧網絡
RequestQueue 請求隊列架構
只說講到的Method,不說多餘的。框架
單純從架構上看Volley。spa
public RequestQueue(Cache cache, Network network, int threadPoolSize, ResponseDelivery delivery) { mCache = cache; mNetwork = network; mDispatchers = new NetworkDispatcher[threadPoolSize]; mDelivery = delivery; }
上面說了,單純從框架的角度說,不說其中的實現。線程
我的理解:如今不是很是流行框架式蓋房子嗎?先把框架作好,而後水泥材料拼命的往裏面填,我無論你怎麼實現,你只要給我添進去了,能用了,事情就辦完了(固然,建築可不能這樣會出人命的。跟軟件一個道理,你按照一個規定,把規定實現了,雖然能用,裏面的實現亂七八糟,耗用資源,超級多,容易崩潰等等。就跟建築豆腐渣工程同樣。)翻譯
1:Cache Network ResponseDelivery 這三個就是三個接口。按照其中接口的規定把他們實現,而後直接傳入進去,你知道按照規則來,我能用就行。
Cache 按照接口 實現裏面的一系列增刪改查操做。
Network --> public NetworkResponse performRequest(Request<?> request) throws VolleyError; 裏面就這一個規定方法,也就是 執行請求方法
NetworkPesponse 響應是把結果返回來的響應又從新作了一遍封裝。
statusCode data headers notModified
1:statusCode狀態碼
2: data 結果數據
3:headers 結果數據
4:若是服務器返回304街和 數據已經在緩存中
ResponseDelivery 也就是結果回調 正常結果,錯誤結果。
RequestQueue,Volley應該是爲了方便管理修改,本身模擬一個線程池操做,VolleyToolbox默認的網絡線程(networkDispatcher)(翻譯過來也就是網絡分配器,本質其實就是一個Thread)數量爲4個(能夠本身適當增長減小),緩存線程(cacheDispatcher)數量是1個(1個線程均可以理解若是兩個緩存線程同時操做緩存,那該會出現怎麼樣的結果。)
上面說到4個網絡線程(networkDispatcher) 1個緩存(cacheDispatcher) 先說緩存分配器
//緩存分配器構造
CacheDispatcher(
BlockingQueue<Request<?>> cacheQueue, BlockingQueue<Request<?>> networkQueue,
Cache cache, ResponseDelivery delivery)
參數:
1:cacheQueue這是一個阻塞的緩存隊列,請求就會自動取出。而後執行,下步操做,沒有請求,就會等待,等待,不佔用多少資源。穿這個參數主要意思就是檢查緩存裏面是否有相同的數據(Volley 默認帶一個緩存 能單獨保存字符串數據),因此適合網絡比較頻繁的請求。
2:若是沒有這個緩存,也就是要傳入第二個參數networkQueue的緣由,沒有緩存固然要把這個Request加入到網絡隊列當中,等待網絡調度器調度。
3:傳入這個參數就是緩存的實現,CacheDispatcher是調用這個類存儲數據。
4:第四個參數ResponseDelivery 看名字 也能看出來,是的,響應交付(英語很差 只能這樣),正常結果,和Error結果 經過這個類回調。
NetworkDispatcher 網絡分配器。上面時候了。Volley默認的是開啓4個線程。
先從構造來看:
NetworkDispatcher(BlockingQueue<Request<?>> queue,Network network, Cache cache,ResponseDelivery delivery)
參數:
1:隊列,應該不用說了。也就是4個線程同時從這個隊列中 request = mQueue.take();取出請求。執行請求。
2:Network -->上面說了。按照必定的規則實例化出來的網絡請求。
3:Cache 開始內容,講解。
4:ResponseDelivery 開始內容講解。
總的來講 四個參數大致的意思就是,上面檢查過緩存請求了,若是沒有緩存,請求添加到networkQueue中,網絡分配器進行分配。而第三個Cache就是 若是須要緩存了。順便就緩存到這個裏面了。
每一個類都有他本身的職責。
RequestQueue 類的職責 就是一個線程池,負責添加請求,開啓線程,關閉線程,還有一個清空操做。
CacheDispatcher 職責負責,負責取緩存,若是沒有放入網絡請求中。
NetworkDispatcher 也就是執行網絡請求,還有一個順便存儲Cache結果。