1. 程式人生 > >okhttp的工作原理以及快取機制

okhttp的工作原理以及快取機制

使用範圍 OkHttp支援Android 2.3及其以上版本。 對於java JDK1.7以上。 官方英文網站 中文社群 Android系統提供了兩種HTTP通訊類,HttpURLConnection和HttpClient。 儘管Google在大部分安卓版本中推薦使用HttpURLConnection,但是這個類相比HttpClient實在是太難用,太弱爆了。 OkHttp是一個相對成熟的解決方案,據說Android4.4的原始碼中可以看到HttpURLConnection已經替換成OkHttp實現了。所以我們更有理由相信OkHttp的強大。 優點和不足 1、優點:
透明的GZIP處理降低了下載資料的大小。
其支援HTTP/2協議,通過HTTP/2,可以讓客戶端中到同一伺服器的所有請求共用同一個Socket連線。  API設計輕巧,基本上通過幾行程式碼的鏈式呼叫即可獲取結果。 既支援同步請求,也支援非同步請求。同步請求會阻塞當前執行緒,非同步請求不會阻塞當前執行緒,非同步執行完成後執行 相應的回撥方法。 支援SPDY, 可以合併多個到同一個主機的請,使用連線池技術減少請求的延遲(如果SPDY是可用的話) , SPDY協議是Google提出的基於傳輸控制協議(TCP)的應用層協議,通過壓縮、多路複用和優先順序來縮短載入時間。該協議是一種更加快速的內容傳輸協議。 使用GZIP壓縮減少傳輸的資料量,快取響應避免重複的網路請求、攔截器等等。
2、缺點 第一缺點是訊息回來需要切到主執行緒,主執行緒要自己去寫,第二傳入呼叫比較複雜。 okhttp 的機制原理 一、介紹 OKHttp是一款高效的HTTP客戶端,支援連線同一地址的連結共享同一個socket,通過連線池來減小響應延遲, 還有透明的GZIP壓縮,請求快取等優勢,其核心主要有路由、連線協議、攔截器、代理、安全性認證、連線池以 及網路適配,攔截器主要是指新增,移除或者轉換請求或者回應的頭部資訊,總流程圖如下:
基礎使用: //    okhttp實現HttpPost 網路訪問 //square 公司出的Http請求庫;     //android 原始類 HttpUrlconnection和httpClient;
//高階用法 //    基於Http Post的檔案上傳(類似表單) //    多檔案和多引數同時上傳 MultipartBuilder表單傳入 //    大檔案下載和下載進度回撥 //    大檔案上傳和上傳進度回撥 //    支援session的保持 //    支援自簽名網站https的訪問,提供方法設定下證書就行 //    支援根據Tag取消請求 //    okhttp實現HttpGet  網路訪問 1.例項化:OkHttpClient; 2.獲取物件 Request (Request 是okhttp中訪問請求builder是一個輔助類); 3.獲取物件Response ,獲取call物件呼叫execute; 4.//獲取Responsedbody物件。通過//獲取Responsed物件body方法獲取資料; 5.從Responsedbody物件中獲取伺服器返回的資料 //    okhttp實現HttpPost  網路訪問(json,鍵值對) 1.builder放入鍵值對 2.獲取requestbody物件 3.獲取request物件,將reqbodybody放入它 4.獲取response物件 5.獲取responsebody物件 6從response中獲取伺服器返回資料 OkHttp的execute的方法是同步方法, OkHttp的enqueue的方法是非同步方法, RequestBody的資料格式都要指定Content-Type,常見的有三種:
  • application/x-www-form-urlencoded 資料是個普通表單
  • multipart/form-data 資料裡有檔案
  • application/json 資料是個json