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

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

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

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

Итак, как работает кеш Android Http?

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

Ответ 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) Как я могу переопределить механизм кэширования по умолчанию с моим собственным? И должен ли я?

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

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