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

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

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

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

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

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

person Ilya Gazman    schedule 25.06.2014    source источник


Ответы (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().

person HHK    schedule 29.06.2014
comment
Пикассо устанавливает кеш по умолчанию здесь github.com/square/picasso/blob/master/picasso/src/main/java/com/ - person Prem; 30.06.2014
comment
На самом деле HttpResponseCache. install ничего не говорит о том, как переопределить механизм HTTP-кеширования по умолчанию (3). Или вы указали на источник? Вместо этого я бы указал на ResponseCache.setDefault . - person Michael Allan; 05.02.2016
comment
Как я могу получить значение ETag из кеша? - person IgorGanapolsky; 15.02.2018