/ / Freie Ressourcen beim Verlassen der Aktivität - Android, Android-Aktivität

Freie Ressourcen beim Verlassen der Aktivität - Android, Android-Aktivität

Ich frage mich, ob es möglich ist, Ressourcen zu befreien, wenn Sie eine Aktivität in Android verlassen?

Meine App hat mehrere Aktivitäten und einer von ihnen istsehr speicherintensiv, da es viele qualitativ hochwertige Bilder enthält. Wenn man zu diesem Activity-Heap übergeht, steigt auch dessen nicht sehr weit von der Tangens-Out-of-Memory-Ausnahme entfernt. Nehmen wir an, dass es 85% des Limits ausmacht. Aber - dies ist eine von mehreren Aktivitäten und die einzige, die speicherintensiv ist. Die anderen sind nicht - seine einzigen Listenansichten, die etwas Text enthalten.

Ich sage nicht, dass ich ein Speicherleck habe, aber um auf der sicheren Seite zu sein, möchte ich Ressourcen freigeben, wenn ich diese Aktivität verlasse, die die Bilder enthält. Ich kann nicht herausfinden, wie das geht?

Vielen Dank!!!

Antworten:

0 für die Antwort № 1

Abhängig davon, was Ihre Ressourcen in der onDestroy () Methode, die Sie sollten befreie sie und lassen Sie sie sammeln.


0 für die Antwort № 2

Ihre Ressourcen sollten automatisch vom Garbage Collector gelöscht werden, wenn sie nicht mehr vom System verwendet werden. Sie können dies jedoch wie in dieser Antwort gezeigt erzwingen: https://stackoverflow.com/a/7009362/1222050

ImageView imageView = (ImageView)findViewById(R.id.my_image);
Drawable drawable = imageView.getDrawable();
if (drawable instanceof BitmapDrawable) {
BitmapDrawable bitmapDrawable = (BitmapDrawable) drawable;
Bitmap bitmap = bitmapDrawable.getBitmap();
bitmap.recycle();
}

Auch wenn Sie so viel Speicher füllen, würde ich empfehlen, die Größe unserer Bitmaps zu verkleinern. Was du so machen kannst:

Bitmap b = BitmapFactory.decodeByteArray(imageAsBytes, 0, imageAsBytes.length)
profileImage.setImageBitmap(Bitmap.createScaledBitmap(b, 120, 120, false));

Eine Frage, die ich habe, ist wie beginnen Sie die nächste Aktivität / Teil der App?


0 für die Antwort № 3

A Drawable ist viel breiter als eine Bitmap. Drawable soll alles darstellen, was das Grafiksystem auf dem Display darstellen kann. Es gibt Unterklassen von Drawable - z. B. ShapeDrawable oder ColorDrawable -, die keine Bitmaps enthalten und daher keine manuelle Speicherverwaltung erfordern.

Ein BitmapDrawable umschließt ein Bitmap und enthält einVerweis auf eine Bitmap. Die Bitmap ist speziell, da Android die Pixeldaten für alle Bitmaps in einem separaten Heap verwaltet, der getrennt vom Rest der Anwendung verwaltet wird. Wenn der Android-Garbage Collector ein Bitmap-Objekt bereinigt, bereinigt es auch die Pixeldaten aus dem Bitmap-Heap. Sie können es jedoch schneller erzwingen, indem Sie recycle () manuell auf der Bitmap aufrufen, wodurch die Bitmap ungültig wird und ihre Pixeldaten freigegeben werden.

Android weist Bitmap-Heap mit fester Größe zujede laufende Anwendung, und es ist möglich, dass Ihre App ihren Heap erschöpft, indem zu viele Bitmaps gleichzeitig verwendet werden. Wenn Ihre Anwendung Bitmaps ausgiebig verwendet, werden Sie wahrscheinlich davon profitieren, Bitmaps zu recyceln, sobald Sie wissen, dass Sie sie nicht benötigen.

Update: Der separate Bitmap-Heap gilt für Pre-Honeycomb-Versionen von Android. Ab Honeycomb wurde der Bitmap-Heap mit dem Anwendungsheap zusammengeführt.