okHttp是Square公司开源的一个高性能的网络请求框架,当然Square还贡献了很多好用的开源库https://github.com/square
先来看看okHttp的基本用法:
1.先创建OkHttpClient
// Okhttp 中使用的缓存cache其实最后还是使用的 DiskLruCache,通过Okhttp内部的线程池对缓存进行保存清除等操作的
// 不缓存get方法的响应
OkHttpClient okHttpClient = new OkHttpClient.Builder()
.cache(new Cache(new File("cache"),18*1024*1024))
.readTimeout(5, TimeUnit.SECONDS).build();
2.创建Request对象
Request request = new Request.Builder()
.url("http://www.baidu.com").get().build();
3.将Request封装成Call对象
Call call = okHttpClient.newCall(request); // 实际的Http请求,可以当做request和response连接的桥梁
4.调用Call的execute()执行同步请求
try {
Response response = call.execute(); // 执行同步请求
System.out.println(response.body().toString());
} catch (IOException e) {
e.printStackTrace();
}
或者调用call.enqueue执行异步请求回调:
call.enqueue(new Callback() { // 执行异步请求回调
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, Response response) throws IOException {
}
});
OkHttp同步方法特点:发送请求后,就会进入阻塞状态,直到收到响应。
从上面可以看出无论是同步还是异步都会走的共同路径:
1.创建OkHttpClient和Request对象
2.将Request封装成Call对象
OkHttp异步方法注意点:
异步回调中的两个回调方法onResponse和onFailure都是在子线程中执行的。
下一篇会在源码中详细说的,为什么是在子线程中执行的
异步和同步的不同点:
1.发起请求的方法调用
2.阻塞线程与否
可以看看上图理一下同步和异步。
OkHttp同步和异步的源码解读:https://www.jianshu.com/p/baf47f6f0e11