Recycler ImageView Bitmap
J'ai quelque chose comme ceci:
Bitmap.Config conf = Bitmap.Config.ARGB_8888;
WeakReference<Bitmap> bm = new WeakReference<Bitmap>(Bitmap.createBitmap(3000 + 3000, 2000, conf));
Canvas canvas = new Canvas(bm.get());
canvas.drawBitmap(firstBitmap, 0, 0, null);
canvas.drawBitmap(bm, firstBitmap.getWidth(), 0, null);
imageView.setImageBitmap(bm);
Et j'applique cela sur plus de 10 imageView qui sont créés un par un.
Chaque fois que je créer un nouveau ImageView, je veux recycler les 'bm' objet de la première, l'origine de ce code là-haut, les causes de mon tas de croître de plus en plus et puis jeter OutOfMemoryError, donc je ne l':
bm.recycle()
droit, après j'ai mis l'image Bitmap (bm) pour l'imageView objet.
Cette exception provoque que l'ImageView la toile veut attirer recyclé Bitmap.
Quel est le moyen de recycler une image qui a déjà été mis en image sur ImageView?
Thanksb
- C'est juste après imageView.setImageBitmap(bm); et selon que le bloc se termine.. pas d'autres lignes.
Vous devez vous connecter pour publier un commentaire.
Dans votre méthode onDestroy vous pouvez essayer quelque chose comme ceci:
Le casting devrait fonctionner depuis setImageBitmap est mis en œuvre comme
setImageBitmap()
de nouveau.Si vous définissez le même objet bitmap sur tous vos
ImageView
s, il ne devrait pas jeter unOutOfMemoryError
. Fondamentalement, cela devrait fonctionner:Si cela ne fonctionne pas, cela signifie simplement que votre image est trop grande (6000x2000 pixels est d'environ 12 mo, si j'ai calculé à droite). Vous pouvez soit:
Devconsole la réponse est grande, mais vous pouvez également stocker tous les objets bitmap dans la liste comme membre de la classe, puis de les recycler dans le cycle lorsque le onDestroy() la méthode de l'activité (ou une autre version du cycle de vie de la méthode des composants lorsque vous utilisez bitmap) sera appelée.
Ne pas créer des images plus grandes que vous avez besoin à tout moment. Le tas de limitations sont conçues pour vous empêcher de la pendaison de vous-même et complètement prise sur le périphérique de mémoire limitée.
Si vous avez besoin de plus de détails parce que vous prévoyez d'effectuer un zoom avant, puis re-rendre la partie de l'image avec plus de détails lors d'un zoom, à l'exception du nombre de portions que vous ne visionnez pas.