Comment détruire un drawable à l'intérieur d'une ImageView si nous n'en avez pas besoin?
Cette question est en lien avec la Nous avons explicitement recycler le bitmap si nous n'en avez pas besoin?.
Il y a un ImageView ont un drawable, lorsque l'utilisateur clique sur un bouton, il vous attribuer un nouveau dessiné de l'ImageView.
Nous avons à détruire l'ancien drawable appartient à l'ImageView, et comment?
Drawable oriDrawable = imageView.getDrawable()
//set callback to null
oriDrawable.setCallback(null);
//get the bitmap and recycle it
((BitmapDrawable)oriDrawable).getBitmap().recycle();
Est le code ci-dessus est correcte? Quelle est la meilleure solution?
OriginalL'auteur Freewind | 2012-09-21
Vous devez vous connecter pour publier un commentaire.
Est-ce juste une question d'ordre général ou êtes-vous à court de mémoire? Je ne voudrais pas faire cette optimisation jusqu'à ce que vous avez vraiment un problème.
En général, si vous chargez des bitmaps de drawable dossiers qui ne sont pas très grandes (de méga-octets), alors vous ne devriez pas vraiment de problème.
Vous devez d'abord assurez-vous que les actifs que vous êtes de chargement sont optimales pour où vous de les afficher, par exemple, il n'ya pas de point dans la définition d'une ImageView à une image c'est 1024 x 1024 taille si la zone d'affichage de l'image est d'une taille de 64x64.
Casser l'image bitmap budget est généralement causée par le chargement des images d'une taille inconnue ou tout simplement obtenir la taille d'une image mal, comme décrit ci-dessus, par l'échange d'une ImageView fréquemment seront généralement vous donne pas un problème avec optimale des images de taille.
Il y a un excellent article dans Android de Formation qui couvre le chargement des images bitmap de façon optimale http://developer.android.com/training/displaying-bitmaps/load-bitmap.html
Espère que ça aide
Je voudrais tout d'abord essayer de voir si vous obtenez la question sans recyclage, car ils seront recyclés, avec un GC. Juste assurez-vous que les références à l'un drawable ou des images afin de les rendre GC admissibles.
OriginalL'auteur Ian Warwick
Vous pouvez essayer d'utiliser quelque chose comme:
Où
imageView
est votreImageView
.Réponse originale à cette question ici.
Je ne suis pas sûr de ce que vous voulez dire par là
Merci. Et je ne suis pas sûr de le faire, nous avons de recycler de grandes dessiné autant que possible? Si oui, pourquoi ne pas android fournir un
recycle
méthode pour drawable?Et est
oriDrawable.setCallback(null)
utile ici?Comment voulez-vous le faire sans tomber
java.lang.RuntimeException: Canvas: trying to use a recycled bitmap
. ?OriginalL'auteur Raghav Sood