OkHttp源码与架构(一)

453 阅读2分钟

Android访问网络主要有两种方式,分别是原生方式和调用三方库(OkHttp)。

1. Android 原生方式

Android原生方式主要有两种方式,分别是:

1.1 HttpCLient

HttpClient是Android原生支持的一种访问web的方式,但是由于Api接口太多,导致难以维护且异常太多,因此在Android6.0以后不再支持。在Android 6.0之后的版本已经无法搜到和HttpClient相关的类了,因此准确的说原生的只剩下一个原生类支持web访问:HttpURLConnection。

1.2 HttpURLConnection

HttpURLConnection是Android原生支持的另一种访问web的方式,目前仍可用。

1.2.1 使用方法

HttpURLConnection使用方法如下:

// 创建一个url
URL url = *new* URL("http://www.baidu.com");
// 创建一个HttpURLConnection
HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
// 设置HttpURLConnection各种属性,例如连接、读 超时时间,http请求的方法等
httpURLConnection.setRequestMethod("GET");
httpURLConnection.setConnectTimeout(10000);
httpURLConnection.setReadTimeout(200);
// 获取服务器返回流
InputStream inputStream = httpURLConnection.getInputStream();
// 关闭httpURLConnection
httpURLConnection.disconnect();

2. 三方库方式

除了Android原生方法之外,还有使用三方库的方式实现Android设备与net的交互。其中是最主流的三方库就是OkHttp.

2.1 OkHttp

OkHttp是一个开源的三方库,由于其优异的特性和解耦,使得OkHttp成为最主流的三方库。

2.1.1 使用方法

使用OkHttp需要先添加依赖

dependencies {
...
implementation('com.squareup.okhttp3:okhttp:3.4.1')
}

image.png

OkHttp语言占比-----图片来源于github.com/square/okht…

OkHttp最新版本已经以kotlin为主,因此选择一个较低的版本,这样就都是java的代码,比较方便看。

以get请求为例,使用OkHttp主要有两种方式,分别是同步请求和异步请求。

2.1.1.1 同步请求
// 1.创建okhttp客户端
OkHttpClient client=new OkHttpClient.Builder().readTimeout(5, TimeUnit.SECONDS).build();
// 2.get请求
Request request = new Request.Builder()
        .url("http://www.baidu.com")
        .build();
Response response = null;
try {
// 3.获取response数据
    response = okHttpClient.newCall(request).execute();
} catch (IOException e) {
    e.printStackTrace();
}
// 4.response中获取需要的数据
String responseData = response.body().toString();
2.1.1.2 异步请求
// 1.创建OkHttpClient
OkHttpClient asyncOkHttpClient = new OkHttpClient.Builder().build();
// 2.创建request对象
Request asyncRequest = new Request.Builder()
        .url("http://www.baidu.com")
        .build();
Call asyncCall = asyncOkHttpClient.newCall(request);
asyncCall.enqueue(new Callback() {
    @Override
    public void onFailure(Call call, IOException e) {

    }

    @Override
    public void onResponse(Call call, Response response) throws IOException {

    }
});

从以上使用方法中可以看出,OkHttp使用主要涉及四个基本对象:OkHttpClient、Reques、Call、Response 。这四个类的调用顺序如下:

image.png

下一篇文章我们将从OkHttp的使用方法来看看那OkHttp的源码。