Speicherprobleme in Fragmenten mit Bildern

9

Ich verwende Fragmente, um Bilder / Seiten anzuzeigen. Ich habe eine Aktivität (Main), die alle Fragmente enthält.

%Vor%

Hier ist der Code in der Fragmentklasse -

%Vor%

Jedes Mal, wenn ich zum nächsten Fragment gehe, wird das onDestroyView () des vorherigen Fragments aufgerufen und ich entferne alle Referenzen von Bitmaps und Bildansichten, aber der Speicher von Bitmaps oder Zeichnungsdateien wird nicht freigegeben und der Speicher nimmt weiter zu es wird um 50 MB abgestürzt.

Kann mir jemand helfen? Ich entwickle diese App nur für den Galaxy Tab.

UPDATE - Code für dynamische Seite -

%Vor%

}

%Vor%     
Khushwant 13.02.2012, 09:15
quelle

4 Antworten

1

Von Google:

  

Unterstützung von Fragmentstatuspagern       Demonstriert die Verwendung der Unterstützungsklasse ViewPager mit einem FragmentStatePagerAdapter, um eine Benutzeroberfläche zu erstellen, auf der der Benutzer zugreifen kann   Schleudern nach links oder rechts, um zwischen Fragmenten zu wechseln. Diese Versionen der   Adapter hält die Fragment-Instanzen, die ViewPager enthält, nicht   zerstört.

Ссылка

Der Unterschied zum normalen Pager besteht in der Erweiterung von FragmentStatePagerAdapter.

Bearbeiten: Im Google Code hast du das im Adapter:

%Vor%

Beachten Sie die getItem () Implementierung. Wir erhalten ein neues Fragment auf Anforderung, also erstellen wir das Fragment nicht, bevor wir es brauchen. Dies steht im Gegensatz zu Ihrem Ansatz, bei dem Sie alle Fragmente erstellen und sie einem Vektor hinzufügen. (Java bevorzugen Arraylisten übrigens.) Bei Ihrer Herangehensweise werden die Fragmente nicht aus dem Gedächtnis entfernt, da es immer einen Verweis auf die Fragmente geben wird.

Bearbeiten 2: Um genau zu sein. Im Folgenden:

%Vor%

Sie könnten etwas tun wie:

%Vor%     
Warpzit 13.02.2012, 09:22
quelle
1

Nach documentaions wird OnDestroyView aufgerufen, wenn Fragment nicht mehr sichtbar ist wie onStop für Aktivität, aber OnDestroy (Fragments) entspricht OnDestroy für Aktivität.

Wenn also unBindDrawable von OnDestroy von Fragmenten aufgerufen wird, sollte der gesamte Speicher freigegeben werden.

%Vor%     
all-ok 12.12.2012 13:25
quelle
0

Setzen Sie als erstes eine Nullprüfung für alle Bitmap-Variablen ein, zum Beispiel

%Vor%

also wird die ganze Zeit Bitmap nicht initialisiert

Ich denke, das ist der richtige Weg .. und sollte funktionieren Nehmen Sie an, Sie haben zwei Fragmente f1 und f2, die Sie innerhalb von activity act verwenden,

und Sie haben 2 Bitmap in f1

%Vor%

und wieder in 2 Bitmaps in f2

%Vor%

jetzt, wenn Sie diese var initialisieren, verwenden Sie einfach Null-Überprüfung, wenn diese null sind nur dann initialisieren sie oder sonst nicht .. dann werden Sie keine Speicherproblem konfrontiert,

und wenn Sie Ihre Bitmap löschen möchten

%Vor%

Wenn Sie zwischen den Fragmenten wechseln, sollten Sie Bitmaps initialisieren, bevor Sie etwas anzeigen. Das heißt, kurz vor der Super-Methode. und stellen Sie sicher, dass das Bitmap initialisiert wird, sobald ein Fragment zur Sichtbarkeit gelangt.

Ich denke, dass alles, was Sie tun müssen :) glückliche Kodierung

    
user1346836 08.06.2012 16:32
quelle
0

Dank all-ok Antwort schaffe ich es, meinen Fehler zu beheben. Ich habe mit OnDestroy immer weniger Speicher zur Verfügung. Ich habe das Fragment hinzugefügt: Wobei rl_todo das RelativeLayout ist, das die Gridview enthält. gv_productos ist die Gridview filtro ist die Aktivität, die alle Ansichten enthält.

%Vor%     
Dantalian 19.01.2013 16:55
quelle