安卓客户端面试常问问题关于框架的底层源码;
okhttp是一个非常火爆的框架,首先看看他为什么火爆或者说使用这个框架能给我们带来什么?是代码的简洁还是说性能方面得到优化了呢:
- 允许连接到同一个主机地址的所有请求,提高请求效率
- 共享Socket,减少对服务器的请求次数
- 通过连接池,减少了请求延迟
- 缓存响应数据来减少重复的网络请求
- 减少了对数据流量的消耗
- 自动处理GZip压缩
(摘录自官网)
简单来说就是降低了请求的复杂程度性能效率有一定优化
下面直接开始使用:
请求部分:Request使用步骤:
- 创建okhttpclient对象;
- 创建request对象(指定你要访问的内容,方式等等);相当于一个封装然后传入到指定方法内,进行处理
- 利用okhttpclient对象的newcall方法对该requeset创建一个Call对象;
- 调用call对象的enqueue方法并且传入回调对象callback;算是匿名内部类,然后重写访问成功和失败的逻辑;
String url = "http://wwww.baidu.com";
OkHttpClient okHttpClient = new OkHttpClient();
Request request = new Request.Builder()
.url(url)
.get() //默认就是GET请求,可以省略
.build();
Call call = okHttpClient.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
Log.d(TAG, "onFailure: ");
}
@Override
public void onResponse(Call call, Response response) throws IOException {
//response.body().string() 获得服务器返回的数据
Log.d(TAG, "onResponse: " + response.body().string());
}
});
这个简单get方法,框架使用比如post异步等等高级操作还有很多但不是我想说的重点,下面带大家了解一下具体的底层实现原理。
首先请求是通过call的队列enqueue方法实现的,这个方法其实就是发起一个请求,但是这个请求肯定不会随意就发送的,当有多个的时候该怎么处理呢?
这时候就需要一个分发器的东西 他是okhttp用于管理你发出的请求的类;并通过execute()及enqueue()方法对同步或异步请求进行处理;最后返回结果的时候,对于多个返回结果也需要使用一个拦截器去获取你这个请求指定的返回结果。
具体拦截器的一些功能可以自己在网络查找,说太深了大家也记不住 ,只需要记住大致实现逻辑,结合具体代码去看就行。
拦截器模式的话使得我们后期拓展性非常强,可以对返回消息机型操作处理或者是自定义自己想要的拦截器