Android 08:OkHTTP

本文深入探讨OkHttp的优势,如http2支持、连接池、缓存机制等,并介绍了其使用方法,包括同步和异步请求。同时,文章揭示了OkHttp在设计模式上的应用,如责任链模式和策略模式,并详细阐述了拦截器链的工作流程,从应用拦截器到CallServerInterceptor的整个过程。

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

1. OkHttp有哪些优势

  1. 支持http2,对一台机器的所有请求共享同一个socket

  2. 内置连接池,支持连接复用,减少延迟

  3. 支持透明的gzip压缩响应体

  4. 通过缓存避免重复的请求

  5. 请求失败时自动重试主机的其他ip,自动重定向

  6. 丰富的API,可扩展性好

2. OkHttp使用

//1.创建OkHttpClient
OkHttpClient client = new OkHttpClient();
//2.创建Request,并填入url信息
String run(String url) throws IOException {
Request request = new Request.Builder()
    .url(url)
    .build();
//3.同步请求
Response response = client.newCall(request).execute();
//4.异步请求
client.newCall(request).enqueue(responseCallback)

3. OkHttp运用的设计模式

  1. 责任链模式(拦截器的链式调用)
  2. 策略模式(在CacheInterceptor中,在响应数据的选择中使用了策略模式,选择缓存数据还是选择网络访问。)

4. OKHttp的拦截器链

  1. 应用拦截器: 拿到的是原始请求,可以添加一些自定义header、通用参数、参数加密、网关接入等等。
  2. RetryAndFollowUpInterceptor: 处理错误重试和重定向
  3. BridgeInterceptor: 应用层和网络层的桥接拦截器,主要工作是为请求添加cookie、添加固定的header,比如Host、Content-Length、Content-Type、User-Agent等等,然后保存响应结果的cookie,如果响应使用gzip压缩过,则还需要进行解压。
  4. CacheInterceptor: 缓存拦截器,如果命中缓存则不会发起网络请求。
  5. ConnectInterceptor: 连接拦截器,内部会维护一个连接池,负责连接复用、创建连接(三次握手等等)、释放连接以及创建连接上的socket流。
  6. networkInterceptors:(网络拦截器) 用户自定义拦截器,通常用于监控网络层的数据传输。
  7. CallServerInterceptor: 请求拦截器,在前置准备工作完成后,真正发起了网络请求。

5.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值