Кэшировать изображения на Android в течение нескольких дней

#android #caching #bitmap

#Android #кэширование #растровое изображение

Вопрос:

Мне нужно кэшировать изображение, скажем, на 14 дней. В некоторых веб-сервисах я бы настроил apache для этого с ExpiresActive On помощью and ExpiresDefault "access plus 14 days" .

Это возможно сделать с Android? Конечно, я могу хранить изображения в памяти телефона, но это не то решение, которое я ищу.

Я прочитал эту статью (кэширование растровых изображений) — но использование LruCache , а затем вызов finish() уничтожат кеш, я прав или я чего-то не хватает?

Итак, есть ли какие-либо другие решения, кроме сохранения файлов в хранилище телефона?

Ответ №1:

Один из вариантов, который у вас есть, — использовать UniversalImageLoader. Благодаря этому вам не придется изобретать велосипед. Вы можете кэшировать изображение с помощью этого:

 DisplayImageOptions options = new DisplayImageOptions.Builder().cacheInMemory(true).cache.build();
ImageLoader.getInstance().displayImage(url, iv, options,
                new SimpleImageLoadingListener() {
...
}
 

Существуют и другие варианты, такие как cacheOnDisk(true) . Это может быть не лучшим решением вашей проблемы, если вам требуется определенное количество дней работы механизма кэширования.

Редактировать

Еще одна хорошая альтернатива — использовать Sync Adapter. К сожалению, это довольно длинная тема, поэтому просто перейдите по ссылке, которую я предоставил. Чтобы использовать его, вам, возможно, придется создать ContentProvider для своего приложения, а затем создать класс, который реализует AbstractThreadedSyncAdapter .

Комментарии:

1. Спасибо за вашу готовность 🙂 это здорово в теме периодического обновления растровых изображений, но не решает проблему кэширования… В любом случае 1 для адаптера синхронизации, потому что я никогда не слышал об этом, и это выглядит как мощный инструмент.

Ответ №2:

Итак, наконец, я решил это, используя SharedPreferences и File

Как это работает

У меня есть json со строкой изображений base64. И мне нужно хранить эти значения в течение 7 дней. Итак, я записываю json в файл, сохраняю, помещаю строку даты (дата создания) в SharedPreferences.

  1. Пользователь открывает действие
  2. Получить дату из SP
  3. Проверьте, не истекла ли дата
  4. Истек срок действия — заставить получить новый json из http-запроса
  5. !Истек срок действия — проверьте, существует ли файл json
  6. Существует — загрузить json из файла
  7. !Существует — заставить получить новый json из http-запроса и сохранить в файл, обновить дату создания

Я не уверен, что это правильное решение, но оно работает для меня.

Комментарии:

1. Хороший анализ. Но я думаю, что было бы лучше не сохранять as Shared Preference — Date.