在网上看到一篇国外的讲okhttp缓存的文章,感觉写的很好,简明扼要。国内虽然也有很多讲okhttp缓存的文章,有的写的很好,有的则写的比较繁琐。所以我还是把这篇文章大致翻译一下,并结合使用过程中的一些情况以及自己的理解,来谈一下okhttp缓存。原来的文章在这里
先放一张图,这是不考虑离线情况下的okhttp缓存工作流程图:
okhttp的缓存是基于http协议的,也就是,假如服务器返回的http header里表明了是不支持cache的,比如这样
这是某一台服务器返回的response header,如果返回了这样的header的话,那么你就无法使用okhttp的cache了,只能考虑通过拦截器来自己实现。不过我觉得这样很奇怪,cache本身是避免重复请求浪费服务器资源的,所以http协议里对缓存时间,缓存策略都做了详细的规范,诸如Cache-Control,Expires,Last-Modified,max-age等等。如果绕过http协议,自身实现,你如何保证你的缓存没有过期呢?或者换个说法,你如何确定这是服务器希望你使用的缓存呢?
然后接下来文章里是一些Quick questions and answers.,通过这些Q&A,你会对okhttp的缓存有一个很好的了解
1. 如何启用okhttp的缓存?
只需要一句代码就够了:
int cacheSize = 10 * 1024 * 1024; // 10MB
OkHttpClient.Builder builder = new OkHttpClient.Builder()
.