#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.
- Пользователь открывает действие
- Получить дату из SP
- Проверьте, не истекла ли дата
- Истек срок действия — заставить получить новый json из http-запроса
- !Истек срок действия — проверьте, существует ли файл json
- Существует — загрузить json из файла
- !Существует — заставить получить новый json из http-запроса и сохранить в файл, обновить дату создания
Я не уверен, что это правильное решение, но оно работает для меня.
Комментарии:
1. Хороший анализ. Но я думаю, что было бы лучше не сохранять as
Shared Preference
— Date.