Nous essayons de précharger les images dans la mémoire cache pour les charger plus tard (les images sont situées dans le dossier Asset de l'application)
Ce que nous avons essayé:
Glide.with(this)
.load(pictureUri)
.diskCacheStrategy(DiskCacheStrategy.ALL);
Glide.with(this)
.load(picture_uri)
.diskCacheStrategy(DiskCacheStrategy.ALL)
.preload();
Le problème: les images ne sont mises en cache que lorsque nous essayons de les charger/les afficher: elles doivent être chargées en mémoire avant afin qu'elles apparaissent plus rapidement.
Glide.with(this)
.load(picture_uri)
.into(imageView);
Nous avons également essayé d'utiliser un GlideModule pour augmenter la taille de 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) {
}
}
Dans le manifeste:
<meta-data Android:name=".GlideModule" Android:value="GlideModule"/>
Jusqu'à présent, rien ne fonctionne. Une idée?
Nous essayons d'utiliser une imageView 1 dp invisible, mais le résultat est le même:
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);
}
}
La meilleure option est de gérer vous-même la mise en cache, cela vous donne plus de contrôle et devrait être facile car vous savez déjà quels bitmaps doivent être chargés.
LruCache<String, Bitmap> memCache = new LruCache<>(size) {
@Override
protected int sizeOf(String key, Bitmap image) {
return image.getByteCount()/1024;
}
};
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) {
// the constructor SimpleTarget() without (width, height) can also be used.
// as suggested by, An-droid in the comments
@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);
}
Utilisez le code suivant pour mettre en cache les images sans les afficher
en utilisant la méthode downloadOnly
si vous cherchez à télécharger des images à partir du Web et à les stocker dans le diskCache:
FutureTarget<File> future = Glide.with(applicationContext)
.load(yourUrl)
.downloadOnly(500, 500);
en utilisant la méthode preload
si vous souhaitez les charger dans le cache mémoire.
Glide.with(context)
.load(url)
.preload(500, 500);
Vous pouvez ensuite utiliser les images mises en cache à l'aide de
Glide.with(yourFragment)
.load(yourUrl)
.into(yourView);
Glide version 4.6.1
RequestOptions requestOptions = RequestOptions
.diskCacheStrategy(DiskCacheStrategy.ALL);
Glide.with(appContext)
.asBitmap()
.load(model)
.apply(requestOptions)
.submit();