我一直在调查Picaso,Android的图片下载和缓存库。我发现他们的缓存机制基于Android HttpResponseCache。文档说:
要测量缓存有效性,此类会跟踪三个统计信息:
- 请求计数:自创建此缓存以来发出的HTTP请求数。
- 网络计数:需要网络使用的请求数。
- 命中计数:缓存提供响应的请求数。
那么Android Http缓存究竟是如何工作的?
答案 0 :(得分:10)
答案如下。
1)Android如何知道缓存或不缓存文件,以及持续多长时间?
如果满足以下所有条件,则HttpResponseCache
会缓存HTTP或HTTPS响应
它是通过HttpResponseCache.install()
setUseCaches(true)
或HttpURLConnection
上调用了 HttpsURLConnection
HTTP / HTTPS服务器返回的标头允许缓存。有关细节的详细信息,请参阅ResponseHeaders.isCacheable()
implementation。
缓存使用LRU策略将较旧的缓存响应替换为较新的缓存,以确保它不超过分配的磁盘大小。
2)何时清理了缓存,以及由谁清理?
如果使用Context.getCacheDir()
或Context.getExternalCacheDir()
中的目录初始化缓存,则通常会在卸载应用程序时删除文件。可以通过调用HttpResponseCache.delete()
3)如何用自己的方式覆盖默认的http缓存机制?我应该吗?
请参阅HttpResponseCache.install()
。如果您的应用程序通过HTTP或HTTPS加载了可缓存的资源,并且没有自己的缓存层,那么您应该考虑使用它。 HttpResponseCache
实现应该可以正常工作。
请注意,默认情况下不使用缓存。您需要使用HttpResponseCache.install()
安装一个。