/ / Android: Garbage Collector funktioniert nicht für Bitmap - Android, Ausnahme, Bitmap, Müll

Android: Garbage Collector funktioniert nicht für Bitmap - Android, Ausnahme, Bitmap, Müll

Ich habe einen ViewPager mit ein paar Fragmenten. In einem Fragment onCreateView,

Ich decodiere ein paar Bitmaps, die Feldern in der Fragment-Klasse zugewiesen sind. Wenn ich versuche, zwischen den Fragmenten zu wischen, erhält die Anwendung an einem bestimmten Punkt ein OutOfMemory Ausnahme (heap is exhausted).

Ok, das ist eine wirklich schlechte Übung, aber, ist das nicht GC soll Speicher freigeben, bevor meine Anwendung getötet wird?

Wenn Sie die Bitmap auf das gleiche Feld umstellen, sollte die vorherige Bitmap freigegeben werden. Auf S4 bekomme ich die Ausnahme sehr bald.

Antworten:

1 für die Antwort № 1

Angenommen, Sie laden eine Bitmap, sagen wir, das ist diezuerst und dann eine neue decodierte zweite Bitmap zu der ersten zuweisen, die erste Bitmap wird nicht GC "ed, wenn Sie die zweite dekodieren. GC wird es später tun, wann immer es entscheidet. Wenn Sie so schnell Speicher freigeben möchten, sollten Sie recycle () aufrufen kurz bevor die zweite Bitmap decodiert wird. Hier. Und, gehen Sie durch Android "s Bitmap-Speicher verwalten Artikel. Verweisen Dies auch.


0 für die Antwort № 2

Fragmente werden im Speicher gehalten, sofern nicht anders angegeben, also entweder Sie manuell trennen und entsorgen Fragmente beim Streichen oder mBitmap.recycle () beim Streichen.

Bearbeiten, Code:

     final FragmentTransaction fm = getActivity()
.getSupportFragmentManager().beginTransaction();
fm.replace(R.id.fragPlayerMain, playerFragment, "fragment").addToBackStack(null);
fm.hide(thisFrag);
fm.detach(thisFrag);
fm.commitAllowingStateLoss();