Android кеширование изображений - PullRequest
139 голосов
/ 22 декабря 2009

Как можно кэшировать изображения после их загрузки из Интернета?

Ответы [ 17 ]

3 голосов
/ 01 января 2014

Что мне действительно помогло, так это настройка ResponseCache для моего основного класса:

try {
   File httpCacheDir = new File(getApplicationContext().getCacheDir(), "http");
   long httpCacheSize = 10 * 1024 * 1024; // 10 MiB
   HttpResponseCache.install(httpCacheDir, httpCacheSize);
} catch (IOException e) { } 

и

connection.setUseCaches(true);

при загрузке растрового изображения.

http://practicaldroid.blogspot.com/2013/01/utilizing-http-response-cache.html

3 голосов
/ 02 декабря 2012

Рассмотрите возможность использования Универсальной библиотеки Image Loader от Сергей Тарасевич . Он поставляется с:

  • Многопоточная загрузка изображений. Позволяет определить размер пула потоков
  • Кэширование изображений в памяти, в файловой системе устройства и на SD-карте.
  • Возможность прослушивания процесса загрузки и загрузки событий

Универсальный загрузчик изображений позволяет подробное управление кэшем для загруженных изображений со следующими конфигурациями кэша:

  • UsingFreqLimitedMemoryCache: наименее часто используемое используемое растровое изображение удаляется при превышении лимита размера кэша.
  • LRULimitedMemoryCache: Используемое наименьшее недавно использованное растровое изображение удаляется при превышении лимита размера кэша.
  • FIFOLimitedMemoryCache: правило FIFO используется для удаления при превышении лимита размера кэша.
  • LargestLimitedMemoryCache: растровое изображение , самое большое , удаляется при превышении лимита размера кэша.
  • LimitedAgeMemoryCache: Кэшированный объект удаляется, когда его возраст превышает определенное значение .
  • WeakMemoryCache: кэш памяти, содержащий только слабые ссылки на растровые изображения.

Простой пример использования:

ImageView imageView = groupView.findViewById(R.id.imageView);
String imageUrl = "http://site.com/image.png"; 

ImageLoader imageLoader = ImageLoader.getInstance();
imageLoader.init(ImageLoaderConfiguration.createDefault(context));
imageLoader.displayImage(imageUrl, imageView);

В этом примере используется значение по умолчанию UsingFreqLimitedMemoryCache.

2 голосов
/ 10 февраля 2012

В libs-for-android от Google есть отличные библиотеки для управления кешем изображений и файлов.

http://code.google.com/p/libs-for-android/

1 голос
/ 05 декабря 2011

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

Но ImageDownloader.java прекрасно работает для меня. Он использует HashMap до тех пор, пока не будет достигнута емкость или пока не истечет время ожидания очистки, после чего все будет перенесено в SoftReference, используя тем самым лучшее из обоих миров.

1 голос
/ 12 сентября 2012

Я предлагаю ЗАЖИГАНИЕ это даже лучше, чем Droid fu

https://github.com/kaeppler/ignition

https://github.com/kaeppler/ignition/wiki/Sample-applications

0 голосов
/ 12 февраля 2013

Ещё позже отвечу, но я написал Android Image Manager, который прозрачно обрабатывает кеширование (память и диск). Код есть на Github https://github.com/felipecsl/Android-ImageManager

0 голосов
/ 12 октября 2011

Поздний ответ, но я решил добавить ссылку на свой сайт, потому что я написал учебник по созданию кэша изображений для Android: http://squarewolf.nl/2010/11/android-image-cache/ Обновление: страница была отключена, так как источник устарел. Я присоединяюсь к @elenasys в ее совете использовать Зажигание .

Так что всем людям, которые наткнулись на этот вопрос и не нашли решения: надеюсь, вам понравится! = D

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...