Bitmap-Bild aus der Erinnerung
Ich weiß es gibt viele Diskussionen über android, bitmap-Bilder aus der Erinnerung, aber ich Frage mich, wenn jemand könnte es mir erklären..
Derzeit in meiner app habe ich eine Tätigkeit, die Listen Bild (niedrige Qualität) und wenn ich auf ein Bild-es öffnet sich eine neue Aktivität, um das Bild anzuzeigen Vollbild. In meiner 2. Aktivität der Klasse I haben:
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 1;
bm = BitmapFactory.decodeFile(myImagePath, options);
Dann legte ich diese in eine Bildansicht, um es anzuzeigen. Dies funktioniert, und zeigt mein Bild auf seine volle Qualität. Jedoch wenn ich auf zurück, und klicken Sie dann auf, um zu sehen, dass Bild wieder (und wiederholen Sie dies 6 mal) .. auf dem 6. mal öffnen des Bildes (activity2) bekomme ich eine out of memory Fehlermeldung besagt, dass die Heap-Größe=6919KB, Zugeordnet=3125KB, Bitmap Size = 25848KB!
Wie wird die bitmap-Größe so groß sein? Ich nahm an, es kann sein das erstellen neuer Instanzen die ganze Zeit, so dass ich dann beschlossen, eine Methode in meinem 2-Aktivität, wenn die zurück-Taste gedrückt..und bei dieser Methode habe ich meine bitmap=null und hat auch System.gc() zum löschen der garbage collector ABER das hat das problem nicht beheben. Noch heute bekomme ich eine out of memory-Fehler auf der 6. mal der Klick auf die Miniaturansicht, um das Bild in voller Auflösung
Kann mir jemand erklären, warum? Dank
- Das ist ungefähr eine 6-megapixel-bitmap mit alpha-Kanal. Bitmaps sind groß.
- warum ist die bitmap-Größe - 25 MB auf der out of memory Fehler dann? und wie ich sagte, es wird die Arbeit für 5 Ansichten und der Arbeitsspeicher auf das 6. mal
- Sind Sie undicht Speicher?
- ich muss denke ich.. aber ich verstehe nicht, wie
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es einige großartige Informationen von android, erklärt alles im detail, und wie dieses problem zu überwinden,hier.
Jedes pixel aus 4 Bytes. 6M Pixel = 24MBs
Ein Foto verwenden können, bis alle Speicher.
Wieder Stelle ich Sie an dieser toller link fand ich aus einer anderen Frage ALSO, dass hat tutorials, wie man richtig über kommt das problem.
inSample Größe sollte so eingestellt werden, das Bild wird skaliert auf die Größe des Anzeigebereichs (1 = volle Größe), es sei denn, es besteht Grund Sie denken, Sie brauchen alle bits des Bildes, so dass 2 = 1/2 Skala 4 1/4 scale etc.
Versuchen Sie auch bm.recycle (), wenn Sie fertig sind mit der bitmap vor der Verwendung =null
Update
Blick auf die zweite Antwort was bedeutet Recycling tun, es sei denn, Sie haben das schon versucht und es hat nicht funktioniert. Ich habe getan, ähnliche Dinge, die mit dem laden von Bildern, und nie aus der Erinnerung, das ist kein Beweis, dass es für Sie zu arbeiten, aber es ist ein best-practice-soweit ich das sagen kann.