Я пытаюсь сделать recyclerview с гифками. Все показывает отлично, но fresco не кэширует гифки. После прокрутки ресайклера вниз и снова прокрутки вверх гифки загружаются снова. Я предположил, что они должны кэшироваться и загружаться немного быстрее. Ранее я использовал библиотеку ION. Загрузка была быстрее и не было проблем с кешем. Мне пришлось заменить библиотеку, потому что у нее возникли проблемы с декодированием gif, описанные здесь. Текущее решение выглядит так:
//for default initial in application class
Fresco.initialize(this);
//I have also tried to change DiskCacheConfig and ImagePipelineConfig params.
//Without any positive result
//for recyclerview on onBindViewHolder
GenericDraweeHierarchy hierarchy = holder.draweeView.getHierarchy();
Uri uri = Uri.parse(path);
hierarchy.setPlaceholderImage(R.drawable.img_bg);
Logger.e(check(uri) + " " + uri.toString());
DraweeController controller = Fresco.newDraweeControllerBuilder().setUri(uri)
.setAutoPlayAnimations(true).build();
holder.draweeView.setController(controller);
//for method which show cached uri images in imagepipeline
public static boolean check(Uri uri) {
ImagePipeline imagePipeline = Fresco.getImagePipeline();
return imagePipeline.isInBitmapMemoryCache(uri);
}
//... all the time log shows "false + gif url"
Я не видел никакой информации о том, что анимированные изображения не кэшируются. Есть информация о неподдерживаемой постобработке изображений для анимаций, но на этом все. Как правильно кэшировать гифки?
редактировать: это похоже на анимацию кеша фрески, потому что приведенный ниже метод возвращает true для перезагруженных GIF-файлов.
public static boolean isImageDownloaded(Uri loadUri) {
if (loadUri == null) {
return false;
}
CacheKey cacheKey = DefaultCacheKeyFactory.getInstance()
.getEncodedCacheKey(ImageRequest.fromUri(loadUri));
return ImagePipelineFactory.getInstance().getMainDiskStorageCache().hasKey(cacheKey)
|| ImagePipelineFactory.getInstance().getSmallImageDiskStorageCache()
.hasKey(cacheKey);
}