1. 首页
  2. 移动开发
  3. Android
  4. Retrofit自定义缓存逻辑示例

Retrofit自定义缓存逻辑示例

上传者: 2025-05-31 03:13:00上传 ZIP文件 11.74MB 热度 3次

Retrofit 的缓存拦截器实现方式,还是挺实用的。对 Android 开发来说,Retrofit+OkHttp 算是标配了,但缓存用得好不好,真的能拉开差距。这个 demo 项目就围绕着“怎么自定义缓存逻辑”来展开,代码结构清晰,逻辑也好理解。

Retrofit 的网络求,用的是底层的OkHttpClient。而缓存这块,关键就在于你怎么配置它的Cache对象。像下面这样写,基本就是标准套路:

int cacheSize = 10 * 1024 * 1024; // 10MB
Cache cache = new Cache(context.getCacheDir(), cacheSize);
OkHttpClient client = new OkHttpClient.Builder()
  .cache(cache)
  .build();

嗯,这样配置下来,离线时也能读缓存,响应也快。可要想更灵活点,比如判断当前有没有网络,再决定走不走缓存,就得上自定义拦截器了。

像 demo 里用到的CacheInterceptor,逻辑就挺常用的。检查网络状态,有网就移除默认Cache-Control,没网就加上only-if-cached强制读缓存。

public class CacheInterceptor implements Interceptor {
  @Override
  public Response intercept(Chain chain) throws IOException {
    Request request = chain.request();
    if (isNetworkAvailable()) {
      request = request.newBuilder()
        .removeHeader("Cache-Control")
        .build();
    } else {
      request = request.newBuilder()
        .header("Cache-Control", "only-if-cached")
        .build();
    }
    return chain.proceed(request);
  }
}

想让它生效,就加到你的OkHttpClient.Builder里:

OkHttpClient client = new OkHttpClient.Builder()
  .addInterceptor(new CacheInterceptor())
  .cache(cache)
  .build();

项目里的MyApplication3应该就是主入口,里面集成了 Retrofit 接口和各种配置。你可以照着改造自己的项目,或者直接 copy 那段代码试试。

如果你平时遇到网络求慢、用户在断网状态下体验差的问题,这个缓存方案真的值得一试。用得巧了,能省下不少事儿。

感兴趣的话,可以顺便看看这些相关内容:

下载地址
用户评论