Как работает кэш Android HTTP?

я расследовал Пикасо, загрузка изображений и кэширование библиотеки для Android. И я узнал, что их механизм кэширования основан на Android HttpResponseCache. В документации говорится:

для того чтобы измерить эффективность кэша, этот класс отслеживает три статистики:

  • количество запросов: количество HTTP-запросов, выданных с момента создания кэша.
  • сеть число тех запросы, требующие использования сети.
  • hit Count: количество запросов, ответы на которые обслуживались кэшем.

Итак, как именно работает кэш Android Http?

  • как Android знает, кэшировать или не кэшировать файл, и как долго?
  • когда именно кэш был очищен, и кто?
  • как я могу переопределить механизм кэширования http по умолчанию своим собственным? И должен Я?

1 ответов


ответы ниже.

1) Как Android знает, кэшировать или не кэшировать файл, и как долго?

на HttpResponseCache кэширует HTTP или HTTPS-ответ, если все из следующего истинно

  • он был установлен через HttpResponseCache.install()

  • setUseCaches(true)был вызван на HttpURLConnection или HttpsURLConnection

  • заголовки, возвращаемые сервером HTTP/HTTPS, позволяют кэшировать. Увидеть ResponseHeaders.isCacheable() реализация для мелких деталей.

кэш использует стратегию LRU, заменяющую старые кэшированные ответы новыми, чтобы убедиться, что он не превышает выделенный размер диска.

2) когда именно кэш был очищен, и кем?

если кэш инициализируется каталогом в Context.getCacheDir() или Context.getExternalCacheDir() затем файлы обычно удаляются при удалении приложения. Тайник можно удалить вручную, вызвав HttpResponseCache.delete()

3) Как я могу переопределить механизм кэширования http по умолчанию своим собственным? А должен?

посмотреть HttpResponseCache.install(). Если ваше приложение загружает кэшируемые ресурсы через HTTP или HTTPS и не имеет собственного слоя кэширования, вы должны рассмотреть возможность его использования. Android по умолчанию HttpResponseCache реализация должна работать нормально.

обратите внимание, что по умолчанию используется кэш. Вам нужно установить одно с HttpResponseCache.install().