前言
- 本文涉及源碼均基于
okhttp 3.14.9
切省。
一蚪燕、OkHttp簡介
-
OkHttp
是Android開發(fā)最常用的網(wǎng)絡(luò)請求框架们陆,由Square
公司開源允蚣。 -
Android4.4以后,源碼中
HttpURLConnection
底層實現(xiàn)已經(jīng)替換成了OKHttp
迟几。 - 目前流行的
Retrofit
框架底層也是基于OKHttp
實現(xiàn)消请。 -
OkHttp4.x
已經(jīng)改為kotlin
實現(xiàn)。
二类腮、OkHttp優(yōu)點
- 支持
Http1
臊泰、Http2
、Quic
和WebSocket
協(xié)議蚜枢。 - 連接池復(fù)用底層
TCP(Socket)
缸逃,減少請求延時。 - 支持
GZIP
厂抽,減少數(shù)據(jù)流量需频。 - 緩存響應(yīng)數(shù)據(jù)減少重復(fù)的網(wǎng)絡(luò)請求 。
- 請求失敗支持自動重試其他IP修肠。
- 支持自動重定向贺辰。
三、基本配置
依賴導(dǎo)入
項目導(dǎo)入依賴
implementation 'com.squareup.okhttp3:okhttp:3.14.9'
權(quán)限配置
使用時嵌施,需要在清單文件AndroidManifest.xml
中配置網(wǎng)絡(luò)使用權(quán)限
<uses-permission android:name="android.permission.INTERNET" />
四饲化、OkHttp使用流程
由上圖可知,使用OkHttp發(fā)起一個請求的具體步驟如下:
- 1 通過
OkHttpClient.Builder
創(chuàng)建OkHttpClient
- 2 通過
Request.Builder
創(chuàng)建Request
- 3 調(diào)用
OkHttpClient
對象的newCall
方法吗伤,傳入Request
吃靠,生成Call
- 4 由
Call
對象調(diào)用execute
或者enqueue
方法得到響應(yīng)Response
五、Get 方式發(fā)起請求
同步請求
String url="xxx";
OkHttpClient client = new OkHttpClient.Builder().build();
Request request = new Request.Builder().url(url).build();
Call call = client.newCall(request);
try {
Response response = call.execute();
Log.d(TAG, response.body().string());
} catch (IOException e) {
e.printStackTrace();
}
異步請求
String url="xxx";
OkHttpClient client = new OkHttpClient.Builder().build();
Request request = new Request.Builder().url(url).build();
Call call = client.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, Response response) throws IOException {
Log.d(TAG, response.body().string());
}
});
六足淆、歸納小結(jié)
由上述流程和例子可知:
- 使用
OkHttp
發(fā)起一次請求時巢块,核心是OkHttpClient
、Request
和Call
三個角色巧号。 - 其中
OkHttpClient
族奢、Request
的創(chuàng)建使用均由對應(yīng)的Builder
實現(xiàn)(經(jīng)典的建造者設(shè)計模式)。 -
使用
Call
對象的execute
方法發(fā)起的是同步請求丹鸿,而enqueue
方法則是異步請求越走。