Пользователи могут изменить изображение (заменить его). Как только пользователь изменит свое изображение, я хочу, чтобы новое изображение кэшировалось в Glide, а старое изображение выбрасывалось из кэша.
Я прочитал все в Интернете, но все еще не знаю, как реализовать хорошее решение для этого.
Я пытался пропустить локальную память и дисковые кеши, как при настройке образа:
GlideApp.with(fragment)
.load(url)
.diskCacheStrategy(DiskCacheStrategy.NONE)
.skipMemoryCache(true)
.into(view);
Это решение медленное, потому что теперь оно вызывает новый образ каждый раз - оно никогда не кэшируется новое изображение.
Документация Glide гласит:
лучший способ сделать файл кэша недействительным - это изменить ваш идентификатор при изменении содержимого (url, uri, путь к файлу и т. д. * 1047). *) когда возможно. - https://github.com/bumptech/glide/wiki/Caching-and-Cache-Invalidation
Но это невозможно для меня, поэтому в документации Glide говорится:
Поскольку изменения часто трудно или невозможно изменить В качестве идентификаторов Glide также предлагает API signature () для добавления дополнительных данных, которыми вы управляете, в ключ кеша.
И он приводит такой пример:
Glide.with(yourFragment)
.load(yourFileDataModel)
.signature(new ObjectKey(yourVersionMetadata))
.into(yourImageView);
Но вот и все проблема. Что было бы хорошим "yourVersionMetadata"? Как мне создать и поддерживать его? Я видел такие примеры:
.signature(new ObjectKey(Long.toString(System.currentTimeMillis())))
Это приводит к тому, что ключ кеша диска меняется каждый раз, когда я загружаю образ, поэтому он МЕДЛЕННЫЙ. Мне просто нужно это изменить, когда пользователь заменяет изображение. Не каждый раз, когда изображение загружается.
Кто-то писал:
Вы можете сделать что-то вроде генерирования нового UUID или увеличения целого числа при каждом изменении изображения. Если вы go этот маршрут, вам придется отслеживать текущую подпись для каждого изображения где-то. - https://github.com/bumptech/glide/issues/2841
Я не понимаю, как это сделать.
Я также пытался выполнить задачу Asyn c для полного удаления кэша. Это работает, но опять же это очень медленно (и Glide не рекомендует использовать этот подход).
Я не знаю, как я могу просто вставить текущую подпись (что должно быть быстрее) вместо создания новой подпись каждый раз, когда изображение загружается. Помогите? Кажется, он заменяет изображение, и его повторение не должно быть таким сложным!