OkHttp和Retrofit

本文介绍了OkHttp和Retrofit这两个由Square公司提供的Android网络请求库。OkHttp支持Http2.0,连接池,拦截器等特性,而Retrofit是对OkHttp的封装,提供注解配置网络请求,支持同步、异步和RXJava。文章详细阐述了它们的使用方法、请求流程,并解析了部分源码,还涉及到了Builder模式、工厂模式、适配器模式和代理模式等设计模式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

介绍

OkHttp

OkHttp是由Square公司提供的处理网络请求的开源库,有以下特性:

  1. 支持Http2.0,对一台机器的所有请求共享同一个socket
  2. 内置连接池,支持连接复用,减少延迟
  3. Interceptors(拦截器)轻松处理请求与响应,支持透明的GZIP压缩响应体
  4. 请求失败时自动重连
  5. 拥有队列线程池,轻松写并发
  6. 基于Headers的缓存策略
Retrofit

Retrofit也是Square公司产品,是对OkHttp的封装,将网络请求交给OkHttp,自身就可以通过简单的配置就可以进行网络请求了(后面讨论的Retrofit都是2.0版本)

  1. 请求可以通过注解的方式定制
  2. 支持同步、异步和RXjava
  3. 解耦
  4. 可以对json、xml等响应数据通过不同的反序列工具来解耦
  5. 设置网络请求日志(很多好用的api)

使用方法

不做具体介绍,可以看官方使用文档:OkHttpRetrofit

  1. 同步请求
  2. 异步请求
  3. get请求
  4. post请求
  5. 缓存设置
  6. 取消缓存
  7. 支持请求回调,直接返回对象、对象集合

请求流程

请求流程

OkHttp请求流程

OkHttp部分源码解析

* newCall--实际是调用realCall

            protected RealCall(OkHttpClient client, Request originalRequest) {  
                this.client = client;    
                this.originalRequest = originalRequest;    
                this.retryAndFollowUpInterceptor = new RetryAndFollowUpInterceptor(client); 
            }
    * excuate()--先判断这个请求是否执行了,然后通过getResponseWithInterceptorChain()获取响应

            @Override
         public Response execute() throws IOException {
            synchronized (this) {
                if (executed) throw new IllegalStateException("Already Executed"); //(1)
                executed = true;
            }
            try {
                client.dispatcher.executed(this);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值