web-dev-qa-db-fra.com

Avertissement d'utilisation de Glide dans Recyclerview

Je viens de passer d'Universal Image Loader à Glide. Cependant, lorsque je fais défiler à nouveau dans Recyclage de haut en bas, je reçois des tonnes de messages d'avertissement.

W/Bitmap: Called reconfigure on a bitmap that is in use! This may cause graphical corruption!

Si je remplace Glide par une autre bibliothèque de chargement d’images, l’avertissement disparaît. Code dans bindViewHolder associé aux images:

   Glide.with(viewHolder.imageView.getContext())
            .load(DisplayImageUtil.getImageUrl(item.getImageUrl(), 600))
            .diskCacheStrategy(DiskCacheStrategy.ALL)
            .into(viewHolder.imageView);

Testé sur un Nexus 5.

16
Bendik

Je rencontre le même problème après la première exécution de mon application sur Android M (Nexus 5x). 

EDIT: après avoir ouvert le numéro sur Glide Github - https://github.com/bumptech/glide/issues/743 , j’ai constaté que ma "solution" originale ne résolvait pas le problème, mais que cachais les messages. L’avertissement vient d’Android Bitmap et c’est que Glide réutilise Bitmap pour de meilleures performances.

1
JirkaV

Ceci est discuté ici ,

Cela est généralement le résultat d'une mauvaise utilisation des bitmaps, soit en renvoyant un Bitmap dans le pool plusieurs fois sans intermédiaire, ou par référençant le bitmap après avoir appelé clear () sur le .__ correspondant. Cible. Si vous avez des transformations personnalisées, c'est un bon endroit pour Regardez de près pour vous assurer de ne pas renvoyer une image bitmap à la piscine deux fois. Vous pouvez en savoir plus sur ce problème sur le wiki: https://github.com/bumptech/glide/wiki/Resource-re-use-in-Glide .

Le journal que vous voyez provient du bloc catch (exception capturée). Assurez-vous que vous êtes:

  • Ne pas essayer de charger 2 bitmap dans une vue cible 
  • Non effacement de la ressource pour réutiliser la vue cible mais maintien de la référence de la ressource

puisque vous utilisez recyclerView, le deuxième point est probablement vrai, c’est-à-dire recycler la vue tout en conservant toutes les références bitmap

0
blockwala

Je recevais l'avertissement et la corruption graphique. Cela se présentait sous la forme de bitmaps écrêtés apparaissant en haut et en bas de la vue du recycleur et y rester si le défilement était trop rapide.

Le fait de placer la vue de l’image à l’intérieur de la structure du cadre a permis d’éliminer la corruption graphique.

0
Meanman

Vous pouvez nettoyer les journaux avec les filtres Logcat sur Android Studio.

Ajoutez ^(?!AbsListView|IInputConnectionWrapper|ApplicationPackageManager|Bitmap|ViewRootImpl) dans le filtre Regex of Android Logcat.

0
A-Savant

Essayez d'appeler Glide.clear () avant de charger l'image.

Glide.clear(viewHolder.imageView);
Glide.with(viewHolder.imageView.getContext())
        .load(DisplayImageUtil.getImageUrl(item.getImageUrl(), 600))
        .diskCacheStrategy(DiskCacheStrategy.ALL)
        .into(viewHolder.imageView);

J'espère que cette aide.

0