wie die Freigabe bitmap-Speicher in android
In unserem Programm, wo Sie zu viele Bilder,wir unbindDrawables in jedem Activity-und Fragment wie unter
protected void unbindDrawables(View view) {
if (view != null) {
if (view.getBackground() != null) {
view.getBackground().setCallback(null);
}
if (view instanceof ImageView) {
ImageView imageView = (ImageView) view;
imageView.setImageDrawable(null);
}
if (view instanceof ViewGroup && !(view instanceof AdapterView)) {
for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) {
unbindDrawables(((ViewGroup) view).getChildAt(i));
}
if (!(view instanceof AbsSpinner) && !(view instanceof AbsListView)) {
((ViewGroup) view).removeAllViews();
}
}
}
}
wie diese https://stackoverflow.com/a/6779067 sagte,aber ich benutze die Matte finden Sie, dass die bitmap auch eine Menge Speicher und nicht loslassen.
Class Name | Objects | Shallow Heap | Retained Heap
android.graphics.Bitmap | 490 | 23,520 | >= 36,267,912
android.graphics.Bitmap$1 | 1 | 8 | >= 8
android.graphics.Bitmap$2 | 0 | 0 | >= 80
android.graphics.Bitmap$BitmapFinalizer | 490 | 7,840 | >= 7,840
android.graphics.Bitmap$CompressFormat | 3 | 72 | >= 232
android.graphics.Bitmap$CompressFormat[]| 1 | 24 | >= 24
android.graphics.Bitmap$Config | 4 | 96 | >= 360
android.graphics.Bitmap$Config[] | 2 | 72 | >= 72
android.graphics.BitmapFactory | 0 | 0 | >= 80
android.graphics.BitmapFactory$Options | 0 | 0 |
android.graphics.BitmapRegionDecoder | 0 | 0 | >= 48
android.graphics.BitmapShader | 9 | 216 | >= 15,736
Total: 12 entries (4,509 filtered) | 1,000 | 31,848 |
Ich weiß nicht, warum es nicht veröffentlicht werden und wie Sie zu lösen,jede Stelle kann mir helfen,vielen Dank!
Dieser link wird Ihnen helfen, dude : stackoverflow.com/questions/477572/...
InformationsquelleAutor telentqq | 2013-11-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Rufen Sie bitmap.recycle() zur Freigabe der native Speicher zugewiesen, wenn Sie dekodiert die bitmap.
Und natürlich müssen Sie aufpassen, dass Sie von der Lebensdauer der bitmap. Auf lassen Sie Sie an der richtigen Zeit. Eine bessere Lösung ist die Verwendung von Bild-loader-Klasse zu kümmern. Sehen https://github.com/nostra13/Android-Universal-Image-Loader
Sie müssen kümmern sich um die Lebensdauer der bitmap. Auf lassen Sie Sie an der richtigen Zeit. Eine bessere Lösung ist die Verwendung von Bild-loader-Klasse zu kümmern. Siehe github.com/nostra13/Android-Universal-Image-Loader
Ich danke Ihnen sehr,und ich werde es versuchen!
InformationsquelleAutor Robin
call-Recycling auf die bitmap und entfernen Sie alle Verweise auf ein bitmap-Objekte
InformationsquelleAutor Maciej Boguta
Die Sache ist, dass in der pre-Honeycomb-Versionen Android den Speicher für bitmaps, die war (ist) zugeordnet, die in nicht verwaltetem Speicher, wodurch alle möglichen Probleme. Es ist immer noch veröffentlicht, aber von den finalizer des bitmap-Objekts Umsetzung. Was bedeutet, dass es dauert mindestens 2 Durchgängen in der Gesamtwertung zu sammeln. Auch wenn aus irgendeinem Grund der finalizer nicht ausgeführt werden - Sie bekam das Bild. Eine andere Sache ist - es ist wirklich schwer zu verfolgen, - DDMS nicht sehen und auch nicht MAT.
Für Android 3.0 wurde dies geändert und bitmaps implementiert sind, bei der Verwaltung von byte-arrays, sondern für die älteren Handys...
InformationsquelleAutor Yogesh Tatwal