带着问题学习

  1. 怎么在 OkHttp 或 Retrofit 实现网络缓存
  1. 怎么根据不同的请求设置不同的缓存策略?
  1. 如何实现基于条件的网络请求,以减少数据传输?

在 Android 中使用 OkHttp 或 Retrofit 实现网络缓存的步骤

配置OkHttp缓存

创建一个Cache对象,并指定缓存目录和最大缓存大小。然后,使用OkHttpClient.Builder将缓存对象添加到OkHttp客户端。

配置 Retrofit

将配置好的OkHttp客户端作为参数传递给Retrofit.Builder。

设置缓存策略

配置好 OkHttp 和 Retrofit 之后,还需要设置缓存策略。具体的,可以使用拦截器(Interceptor)来实现。可以创建一个自定义拦截器,根据网络状况和服务器响应头中的缓存控制信息来设置缓存策略。

将自定义拦截器添加到 OkHttp 客户端

  • 使用 OkHttpClient.Builder 的 addInterceptor() 或 addNetworkInterceptor() 方法将拦截器添加到 OkHttp 客户端。
  • 需要注意的是,addInterceptor() 用于 在读取和写入缓存时应用拦截器,而addNetworkInterceptor() 仅在网络请求时应用拦截器。

根据不同的请求设置不同的缓存策略的步骤

自定义拦截器

在拦截器中,根据 url 判断是否应用缓存策略,更具体的,可以指定用哪种缓存策略

添加自定义拦截器到 okHttp 客户端

实现基于条件的网络请求,以减少数据传输的做法

基本思路

使用 If-Modified-Since、If-None-Match 等请求头来实现。

OkHttp:在 request.builder() 时通过 addHeader 方式实现

Retrofit:在 定义 api 接口时通过 @Header() 注解实现

Handler 源码解析Leetcode_15-三数之和