【深藍】Volley 解讀1

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結果。

相關文章
相關標籤/搜索