Предварительная загрузка нескольких изображений с помощью Glide

Мы пытаемся предварительно загрузить изображения в кэш-память, чтобы загрузить их позже (изображения находятся в папке Asset приложения)

Что мы пробовали:

Glide.with(this) .load(pictureUri) .diskCacheStrategy(DiskCacheStrategy.ALL); Glide.with(this) .load(picture_uri) .diskCacheStrategy(DiskCacheStrategy.ALL) .preload(); 

Проблема. Изображения кэшируются только тогда, когда мы пытаемся загрузить / отобразить их: они должны быть загружены в память до того, чтобы они отображались быстрее.

 Glide.with(this) .load(picture_uri) .into(imageView); 

Мы также попытались использовать GlideModule для увеличения размера CacheMemory:

 public class GlideModule implements com.bumptech.glide.module.GlideModule { @Override public void applyOptions(Context context, GlideBuilder builder.setMemoryCache(new LruResourceCache(100000)); } @Override public void registerComponents(Context context, Glide glide) { } } 

В манифесте:

  <meta-data android:name=".GlideModule" android:value="GlideModule"/> 

Пока ничего не работает. Есть идеи?


Мы пытаемся использовать невидимый 1pp imageView, но результат тот же:

 for(Drawing drawing: getDrawingsForTab(tab)){ Glide.with(this) .load(drawing.getImage().toUri()) .dontAnimate() .diskCacheStrategy(DiskCacheStrategy.ALL) .into(mPreloadCacheIv); for(Picture picture : getPictures()){ Glide.with(this) .load(picture.getPicture().toUri()) .dontAnimate() .diskCacheStrategy(DiskCacheStrategy.ALL) .into(mPreloadCacheIv); } } 

Solutions Collecting From Web of "Предварительная загрузка нескольких изображений с помощью Glide"

Лучший вариант – обработать кеширование самостоятельно, оно дает вам больше контроля и должно быть легко, поскольку вы уже знаете, какие растровые изображения должны быть загружены.

Во-первых: настройка LruCache

 LruCache<String, Bitmap> memCache = new LruCache<>(size) { @Override protected int sizeOf(String key, Bitmap image) { return image.getByteCount()/1024; } }; 

Второе: загрузите растровые изображения в LruCache

 Display display = getWindowManager().getDefaultDisplay(); Point size = new Point(); display.getSize(size); int width = size.x; //width of screen in pixels int height = size.y;//height of screen in pixels Glide.with(context) .load(Uri.parse("file:///android_asset/imagefile")) .asBitmap() .fitCenter() //fits given dimensions maintaining ratio .into(new SimpleTarget(width,height) { @Override public void onResourceReady(Bitmap resource, GlideAnimation glideAnimation) { memCache.put("imagefile", resource); } }); 

Третье: использование кэшированных растровых изображений

 Bitmap image = memCache.get("imagefile"); if (image != null) { //Bitmap exists in cache. imageView.setImageBitmap(image); } else { //Bitmap not found in cache reload it Glide.with(context) .load(Uri.parse("file:///android_asset/imagefile")) .into(imageView); } 

Используйте следующий код для кэширования изображений без их отображения.

  1. Используя метод downloadOnly если вы хотите загружать изображения из Интернета и хранить их в diskCache:

     FutureTarget<File> future = Glide.with(applicationContext) .load(yourUrl) .downloadOnly(500, 500); 
  2. Используя метод preload если вы хотите загрузить их в кэш памяти.

     Glide.with(context) .load(url) .preload(500, 500); 

Позднее вы можете использовать кешированные изображения, используя

 Glide.with(yourFragment) .load(yourUrl) .into(yourView);