android 網絡庫

網絡庫重點:java

  • 穩定
  • 高效,能夠複用鏈接
  • 有緩存,不用重複請求

okhttp

毋庸置疑,使用 okhttp 作爲網絡框架。web

  • okhttp 已經穩定使用很長時間,應用很普遍。緩存

  • okhttp 多路複用,有鏈接池。初步來看時根據 host 等等進行復用。鏈接池默認是5個,5分鐘服務器

    1. 提供了 okio 進行讀寫。Buffer 使用雙向鏈表 segment(segment 還有 compact 和 flit 優化,以及 segmentpool 來進行維護) 來進行存儲數據,輸入輸出通過 buffer 達到低的CPU和內存消耗。
    2. okhttp 是依靠先判斷 host 在判斷是否歸爲一個 route ,且支持 http2 多路複用。
  • okhttp 本身有緩存策略,能夠 new Cache 指定緩存目錄和大小,內部會使用 LRU 策略清理。也能夠本身 Request 設置 CasheControl ,推薦有 FORCE_NETWORK 和FORCE_CACHE,不符合要求能夠本身設置builder。restful

    1. 服務器支持緩存,即服務器在 response 頭部有 Cache-Control, okhttp 會處理對應狀況。
    2. 服務器不支持緩存,想要支持就要在 NetworkInterceptor 裏面處理 response,remove Pragma ,添加 Cache-Control。

retrofit

對 okhttp 進行了封裝。網絡

Retrofit 是一個 restful 的 HTTP 網絡請求框架的封裝。 網絡請求的工做本質上是 OkHttp 完成,而 Retrofit 僅負責 網絡請求接口的封裝 App應用程序經過 Retrofit 請求網絡,其實是使用 Retrofit 接口層封裝請求參數、Header、Url 等信息,以後由 OkHttp 完成後續的請求操做 在服務端返回數據以後,OkHttp 將原始的結果交給 Retrofit,Retrofit根據用戶的需求對結果進行解析 相對其餘開源庫而言代碼簡潔使用更加方便.框架

感想

閱讀這2個庫發現一些頗有意思的事情單元測試

  • 由於 Cache 類和 CacheInterceptor 不在一個目錄下,CacheInterceptor 須要持有 Cache 實例。通常作法是 Cache public ,對應方法也要 public。可是 okhttp 並無這麼作。它定義了一個接口 InternalCache。Cache 類內部 持有實現了 InternalCache 實例。CacheInterceptor 類再由 okhttp client 構造裏面傳遞進來 cache 裏的 InternalCache示例。從而實現了 Cache 類方法不 public 另外目錄也能夠調用,且調用由接口來約束。在4.X版本 okhttp 用 kotlin 實現,由於 kotlin 能夠控制包內訪問,因此刪除了 InternalCache 接口類。
    這種場景平時其實平時很容易碰到,爲了項目易維護,要分目錄來進行劃分,可是 java 由於語言特性,一旦外界想要訪問必需要 public 。結果致使不少不想 public 的方法所以暴露或者致使沒法放在不一樣目錄下。okhttp 這種思路雖然略顯 繁瑣,但符合開發原則。值得推薦學習。
  • 定義了一個 Internal 抽象類,內部持有自身實例 public static Internal instance,由 OkHttpClient 主對外類來實現並賦值。從而來打通 internal 目錄下和外界的調用。okhttp 作的很好的點在於將面向對象特性發揮的很好。類職責較單一,但類實例傳遞很頻繁。每每一個類層層傳遞到深處仍在正常使用。這對類實例穩定性其實由很高的要求。
  • retrofit 不涉及具體網絡請求,對請求和返回值等接口作了封裝。要是咱們本身簡單使用的話,實際上不須要retrofit,統一封裝一個 request、response 就能夠。可是從程序設計的角度,考慮之後擴展的話,就不得不考慮 request 多樣性、reponse 多樣性和是否能夠轉換,具體請求是否能夠方便替換等等。retrofit 作到了這些,同時還採用了註解的方式,來簡化了不少代碼,從易用性和可擴展性上實現了平衡,請求用註解,後續不少都採用 adapter,factory 來實現可擴展。從測試方面,retrofit 對外提供了 mock 庫,能夠本身定義 response 返回,固然,由於它是基於 okhttp 的,用攔截器也能實現。對內單元測試覆蓋較全,使用 mockwebserver 模擬請求。
相關文章
相關標籤/搜索