Сценарий:
У меня есть большой GIF-образ, который я хочу кэшировать, первый пользователь открывает приложение, используя Glide - Загрузка и кеширование изображений библиотека. После этого всякий раз, когда пользователь открывает приложение, я хочу показать кэшированную версию, если она есть. Этот URL-адрес GIF истечет через заданный интервал. По истечении этого срока я получаю новый URL GIF и отображаемый/кеш для будущего использования.
Что я пробовал:
Я просмотрел Caching and Cache Invalidation на странице Glide github. Я также пошел, несмотря на поток группы Google "Обеспечение загрузки только изображений с диска с диска" , в котором показано, как получить кеш формы изображения. Я также прошел через Как сделать недействительным вопрос о кешировании Glide для некоторых конкретных изображений.
Из приведенных выше ссылок я вижу следующий sniplet кода, который показывает, как загрузить изображение из кеша. Однако это только пытается получить изображение из кеша. Если его нет в кеше, он не пытается выйти из сети и не работает:
Glide.with(TheActivity.this)
.using(new StreamModelLoader<String>() {
@Override
public DataFetcher<InputStream> getResourceFetcher(final String model, int i, int i1) {
return new DataFetcher<InputStream>() {
@Override
public InputStream loadData(Priority priority) throws Exception {
throw new IOException();
}
@Override
public void cleanup() {
}
@Override
public String getId() {
return model;
}
@Override
public void cancel() {
}
};
}
})
.load("http://sampleurl.com/sample.gif")
.diskCacheStrategy(DiskCacheStrategy.SOURCE)
.into(theImageView);
Вопросы:
-
Есть ли более чистый способ добиться следующего: показать изображение GIF из кеша, если он еще загружен GIF, кешировать его для дальнейшего использования и показать его в
ImageView
. -
В приведенной выше статье кэширования указано следующее:
На практике лучший способ сделать недействительным файл кэша - это изменить ваш идентификатор при изменении содержимого (url, uri, путь к файлу и т.д.)
Сервер отправляет другой URL-адрес в приложение, когда истекает предыдущий. В этом случае, я считаю, что старое изображение в конечном итоге будет собрано мусором? Есть ли способ принудительно удалить изображение из кеша?
-
Напоминаем, есть ли способ предотвратить сборку мусора изображения с определенным ключом (чтобы не допустить повторную загрузку большого файла), а затем позже попросить удалить старое изображение из кеша при изменении URL-адреса