okhttp的个人学习

okhttp的简单描述

OkHttp是一个轻量级网络请求框架

okhttp学习需要注意的点

1、okhttp的dispatcher如何分发的,并且如何存储请求的?
通过excute 放入runningSync请求队列,equeue放入runningASync或者ready请求队列
(注:同一个域名的最大请求5个,所有请求的最大数64个)
2、okhttp的线程池有什么特点?
此线程池是一个队列大小为0的队列,为保证每个请求交给线程池时就会立即执行。
3、okhttp的每个拦截器作用?
以下有简述
4、okhttp的请求连接池是如何复用的?
(使用完的socket会存放在connectionPool中,connectionPool的最大数时5个,存放socket时会将超过时间的socket清除,若都未超过并且大于5个时,将存放时间最长的那个清除。
下次请求会检查connectionPool中是否有闲置的socket可用)

okhttp的流程图

在这里插入图片描述

okhttp的简单使用

同步请求

	String url = "http://taobao.com";
    OkHttpClient client = new OkHttpClient.Builder().build();
    Request request = new Request.Builder().url(url).build();
    Call call = client.newCall(request);
    try {
        call.execute();
    } catch (IOException e) {
        e.printStackTrace();
    }

异步请求

    String url = "http://taobao.com";
    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 onResponse(Call call, Response response) throws IOException {
            if (response.isSuccessful()) {
                // do something
            }
        }

        @Override
        public void onFailure(Call call, IOException e) {
            // do something
        }
    });

okhttp的分发器

在这里插入图片描述

okhttp的拦截器

RetryAndFollowUpInterceptor失败重连以及重定向的拦截器

原理:一个循环来不停的获取response。每循环一次都会获取下一个request,如果没有,则返回response,退出循环。而获取下一个request的逻辑,是根据上一个response返回的状态码,分别作处理。
注:
通过okHttpClient可以设置是否重试
若返回的header中存在Location字段,则会将Location字段的val链接重新封装成Request请求进行重定向

BridgeInterceptor桥接拦截器

原理:请求从应用层数据类型类型转化为网络调用层的数据类型;将网络层返回的数据类型 转化为 应用层数据类型。
注:
添加Header:keep-alive,content-type,gzip压缩
对Response进行gzip解压缩

CacheInterceptor缓存拦截器

原理:缓存拦截器的主要作用是将请求 和 返回 关连得保存到缓存中。客户端与服务端根据一定的机制,在需要的时候使用缓存的数据作为网络请求的响应,节省了时间和带宽。
注:
通过缓存策略、指定的Cache-control等字段和状态码判断缓存是否可以用,是否有效。

连接拦截器 和 最后的请求服务器的拦截器

原理:两个连接器基本上完成了最后发起网络请求的工作。追所以划分为两个拦截器,除了解耦之外,更重要的是在这两个流程之间还可以插入一个专门为WebSocket服务的拦截器( WebSocket一种在单个 TCP 连接上进行全双工通讯的协议)。

注:Connection拦截器:请求连接池,即Socket的复用,默认缓存5个Socket(IP+端口号已绑定)
CallServer拦截器:将请求的数据转成网络请求的数据格式进行真正连接请求
详细地址OkHttp源码彻底解析(四)OkHttp拦截器的作用

okhttp使用到的设计模式

建造者模式
工厂模式
责任链模式

okhttp的注意事项

1、如果post请求的内容为空,不能传空的requestBody会报错 java.lang.IllegalArgumentException: method POST must have a request body
#如果post请求的body和contentType为空
RequestBody.create(null, “”)
2、Response需要关闭
有些方法会关闭资源,有些不会,这一点要注意
3、推荐使用OkhttpClient单例
4、压缩支持
默认开启压缩支持,不需要手动设置(手动设置需要更多设置); 原理:使用拦截器,解析压缩数据
5、默认开启Keep-Alive;
6、Callback在子线程中回调,大部分时候,我们都是需要更新UI的,还需自己post到主线程中处理。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值