okhttp的工作原理以及快取機制
阿新 • • 發佈:2019-02-13
使用範圍
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,常見的有三種:
透明的GZIP處理降低了下載資料的大小。
基礎使用: // okhttp實現HttpPost 網路訪問 //square 公司出的Http請求庫; //android 原始類 HttpUrlconnection和httpClient;
- application/x-www-form-urlencoded 資料是個普通表單
- multipart/form-data 資料裡有檔案
- application/json 資料是個json