Залп: кэширование изображений

Я новичок в работе с Volley и с кэшированием: P. Хотя я уже просмотрел ряд статей и сообщений, связанных с кэшированием изображений с помощью Volley, я до сих пор не понимаю, какой лучший/предпочтительный способ кэширования изображений с помощью Volley. Кэширование диска или памяти? Какую поддержку уже предоставляет Volley и как (связанную с поддержкой кэширования L1 и L2)? В моем случае я использую NetworkImageView, чтобы заполнить представление списка изображениями, которые будут получены из сети. Заранее спасибо!


person arorak    schedule 16.10.2013    source источник
comment
Меня также смущает это: stackoverflow.com/a/16897129/2885233, где сказано, что "Залп неявно обрабатывает диск на основе кэша в собственном кэше L2. Кэш изображений — это просто кеш L1.   -  person arorak    schedule 16.10.2013


Ответы (1)


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

Не связанный конкретно с изображениями, Volley имеет свой собственный дисковый кэш, который он использует для кэширования КАЖДОГО ответа, который он получает, со стратегией кэширования по умолчанию в соответствии с заголовками кэша HTTP-ответ.

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

Если вы недовольны этой стратегией и хотите форсировать дисковое кэширование, вам придется отредактировать/добавить небольшой код, изменяющий стратегию кэширования. Есть много способов добиться этого, одним из которых является предоставление вашей собственной реализации для разбора заголовков HTTP. Взгляните на HttpHeaderParser в источнике Volley.

person Itai Hanski    schedule 20.10.2013
comment
Спасибо Итай! Как вы сказали, я не уверен, что изображения, которые я или любой пользователь (который будет использовать это), будут иметь заголовки кеша или нет. Таким образом, я пытаюсь выполнить только принудительное кэширование диска, и для этого я сослался на: github. com/JakeWharton/DiskLruCache, но я не знаю, хороший ли это способ или любой другой подход может быть лучше. Также мне не ясно, могу ли я использовать DiskBasedCache залпа здесь - person arorak; 21.10.2013
comment
Будьте осторожны: вы не хотите использовать дисковый кеш там, где в конструкторе ImageLoader ожидается кеш памяти. Если вы хотите принудительно кэшировать, вы должны сделать именно это - отредактируйте исходный код Volley, чтобы либо анализировать каждый заголовок HTTP, как если бы он имел заголовок кеша, либо изменить проверку записей в кеше. Кроме того, если мой ответ помог, я был бы признателен, если бы вы его приняли, спасибо. - person Itai Hanski; 21.10.2013
comment
Ok. На самом деле я не знал, что в ImageLoader ожидается кеш памяти. Я пропустил ссылку, в которой говорится, что переданный кеш должен быть «кешем для использования в качестве кеша L1». И L1, очевидно, будет памятью (поправьте меня, если я ошибаюсь ;-)). - person arorak; 21.10.2013