OkHttp 缓存如何工作?

苦山

我最近将我现有的为每个请求创建一个新客户端的实现更改为一个标准的单例客户端。

现在当我开始阅读文档时,我发现还有一个叫做缓存的东西正在被使用。有一些内容说有多个缓存试图访问同一个缓存目录可能最终导致它们相互踩踏并导致崩溃。

我正在查看的文档在他们的 github 存储库中:

okhttp 解决常见问题的方法

我的问题:

我没有专门为我的客户端设置任何缓存或缓存控制。只有几个超时值和一个连接池。如果我为每次调用使用新的请求和响应对象,默认情况下会进行任何缓存吗?

client = new Okhttpclient.Builder()
              . connectTimeout (10000,TimeUnit.MILLISECONDS)
              .readTimeout(15000,TimeUnit.MILLISECONDS)
              . connectionPool (new ConnectionPool ())
              .build();

上面的客户端设置为单例并返回给所有调用 servlet。请求被创建为

  Request req = new Request.Builder()
                  .url(someurl)
                  .get()
                  .build();

  Response res = client.newCall(req).execute();

如果是这样,是否会出现上述踩踏部分的问题。我根本不需要缓存,因为大多数情况下我只是将东西写入另一台服务器,当我阅读时,我确实需要它是当前值而不是缓存一个......所以我需要明确设置缓存吗-control 设置为 force-network 还是我的默认未指定设置相同?

编辑:这是文档响应缓存部分的摘录

要缓存响应,您需要一个可以读取和写入的缓存目录,以及对缓存大小的限制。缓存目录应该是私有的,不受信任的应用程序应该无法读取其内容!

让多个缓存同时访问同一个缓存目录是错误的。大多数应用程序应该只调用一次 new OkHttpClient() ,使用它们的缓存配置它,并在任何地方使用相同的实例。否则,这两个缓存实例将相互践踏,破坏响应缓存,并可能使您的程序崩溃。

阿比吉特·萨卡尔

OkHttp 缓存目录是为每个客户端实例设置的。该文档告诉您的是,您不应将多个客户端配置为使用相同的缓存目录。缓存必须显式启用,并且未在您问题的代码段中启用。

在客户端实例上配置缓存后,您可以控制每个请求的响应缓存。请参阅缓存

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Okhttp 缓存文件未创建(不工作 okhttp 缓存)

来自分类Dev

OkHttp 不缓存请求

来自分类Dev

OkHttp 无法正常工作

来自分类Dev

OkHttp缓存策略和ETag

来自分类Dev

Android okhttp获取缓存响应

来自分类Dev

改造-Okhttp客户端如何缓存响应

来自分类Dev

使用OkHttp缓存(不进行翻新)

来自分类Dev

OkHttp +改造脱机缓存不起作用

来自分类Dev

OKHttp缓存响应的安全性

来自分类Dev

OkHttp +改造脱机缓存不起作用

来自分类Dev

OKHttp3最大失效缓存

来自分类Dev

脱机缓存okhttp +改造不起作用

来自分类常见问题

如何使OkHttp调用同步/阻止?

来自分类常见问题

OkHttp如何记录请求正文

来自分类Dev

如何为OkHttp复制错误

来自分类Dev

如何让Picasso和OkHttp一起工作?

来自分类Dev

如何使用Retrofit和OKHttp使下一个请求无效/强制更新缓存路由?

来自分类Dev

在Android中为OkHttp设置缓存的正确方法

来自分类Dev

改造+ OkHTTP-响应缓存不起作用

来自分类Dev

使用Picasso和OkHttp更新/更改缓存的位图

来自分类Dev

使用OKHttp的毕加索可能缓存所有请求吗?

来自分类Dev

使用 Etags 时 Okhttp 不返回缓存响应

来自分类Dev

位图缓存如何工作?

来自分类Dev

Android OkHttp如何处理ETag

来自分类Dev

如何重新连接okhttp-ws

来自分类Dev

OkHttp如何获取Json字符串?

来自分类Dev

如何强制okhttp对请求使用http / 2?

来自分类Dev

如何使用Square OKHTTP固定证书?

来自分类Dev

如何用OkHttp 2.0实现Android Volley?