Android HTTP缓存如何工作?

时间:2014-06-25 14:21:23

标签: android caching picasso

我一直在调查Picaso,Android的图片下载和缓存库。我发现他们的缓存机制基于Android HttpResponseCache。文档说:

  

要测量缓存有效性,此类会跟踪三个统计信息:

     
      
  • 请求计数:自创建此缓存以来发出的HTTP请求数。
  •   
  • 网络计数:需要网络使用的请求数。
  •   
  • 命中计数:缓存提供响应的请求数。
  •   

那么Android Http缓存究竟是如何工作的?

  • Android如何知道缓存或不缓存文件,以及持续多长时间?
  • 何时清除了缓存,以及由谁清理?
  • 如何用自己的方式覆盖默认的http缓存机制?我应该吗?

1 个答案:

答案 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加载了可缓存的资源,并且没有自己的缓存层,那么您应该考虑使用它。 Android默认HttpResponseCache实现应该可以正常工作。

请注意,默认情况下不使用缓存。您需要使用HttpResponseCache.install()安装一个。