Android: "Versuch, eine Recycling-bitmap" Fehler mit temporären Bitmaps
Meine app laden kann, ganz große Bilder. In eine Anstrengung, um die Speicher-konservativ, ich bin versucht, eine temporäre bitmap zu laden und ein weiteres für das Finale Bild nach der transformation:
.....
finalBitmap.recycle();
finalBitmap = null;
Bitmap tempBitmap = BitmapFactory.decodeStream(fin, ...);
finalBitmap = Bitmap.createBitmap(tempBitmap, ....);
imgview.setImageBitmap(finalBitmap);
.....
Nun, an diesem Punkt sind wir fertig mit tempBitmap, die nur nötig war, um den transport der Bitmap dekodiert, um die transformation Schritt in createBitmap. Also:
.....
tempBitmap.recycle();
tempBitmap = null;
.....
Und... es stürzt ab mit "dem Versuch, eine Recycling-bitmap" Fehler, insbesondere, weil der recycling tempBitmap. tempBitmap nicht angezeigt und wird nur verwendet Recht dort.
Was läuft hier falsch? Soll ich einfach "finalBitmap" ganz und verlassen sich auf createBitmap zu verwalten (finalBitmap = Bitmap.createBitmap(finalBitmap , ....))? Ich sehe nicht, was kontinuierliche Abhängigkeit von tempBitmap würde es dazu führen würde, dass ein solcher Fehler.
Edit: ja, die null-Zuweisung scheint das Ergebnis in das entsprechende, eventuelle garbage collection, aber ich bin verwirrt, warum recycle() auf einen temp-Bitmap ist so problematisch in diesem Fall. Ich habe den Eindruck, dass createBitmap() hält eine Referenz auf, aber warum und für wie lange?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Direkt aus der Android -Dokumentation:
Scheint es, dass die createBitmap Funktionen haben das Potenzial, zu re-verwenden Sie die bitmap, die Sie zur Verfügung gestellt. Wenn das der Fall ist, dann sollten Sie nicht recyceln Sie das temporäre bitmap, da Ihre endgültige bitmap verwendet wird. Eine Sache, die Sie tun können, ist
Sollte nur auf die wiederverwertung der tempBitmap, wenn es nicht die gleiche wie die finalBitmap. Zumindest scheint das das zu sein, was die Dokumentation impliziert.