2017-10-17 2 views
-1

Ich implementiert Aktivität mit Fragmenten. In jedem Fragment habe ich RecyclerView implementiert. In RecyclerView habe ich nach jeder n-ten Zeile eine statische Ansicht aus Meine Singleton-Klasse hinzugefügt, die bereits Ansichten enthält. In onDestroy der Aktivität entferne ich alle Ansichten von GridLayoutManager und entferne alle Ansichten von RecyclerView und lösche Adapterobjekte. Nachdem ich alles gemacht habe, lösche ich auch statische Ansichten von meiner Singleton-Klasse. Aber LeakCanary erkennt Speicherverlust der Aktivität in dieser bestimmten Zeile. Wie man Speicherlecks vermeidet und wie man Ansichten entfernt, die statischen Kontext enthalten?Aktivität Instanz Leckspeicher

Eigentlich möchte ich Facebook-Anzeigen zwischenspeichern, um sie für eine Stunde zu verwenden. Aber leider bin ich dabei immer noch nicht erfolgreich. Wenn ich eine statische Referenz verwende, um Anzeigen zu speichern, liegt ein Speicherleck vor. Ich kenne keine anderen Möglichkeiten, Facebook-Anzeigen korrekt zu cachen.

Antwort

0

In RecyclerView nach jeder nth item row Ansicht habe ich statische Sicht von My Singleton Klasse bereits Ansichten gehalten.

Tun Sie dies nicht.

Wie ein Speicherleck

vermeiden nicht Ansichten von static Felder verweisen Sie.

In Java insgesamt, veränderliche static Felder (d. H. Nicht Konstanten) sind ein Code-Geruch. In Android tolerieren wir sie ein wenig mehr, aber sie werden hauptsächlich für Caches oder die Kommunikation zwischen Komponenten verwendet. A View kann nicht zwischen Komponenten (Aktivitäten) wiederverwendet werden.

+0

Wenn ich in meiner Anwendung einige Daten für eine halbe Stunde speichern möchte, ohne irgendeine Erinnerung an die Aktivitätsinstanz zu verlieren, was soll ich tun? –

+0

@WakilAhmad: Halten Sie auf * Daten *, nicht UI-Widgets, Aktivitäten, etc. Einfache alte Java-Objekte (POJOs) sind gut, keine Größenprobleme. – CommonsWare

+0

Ich möchte native Facebook-Anzeigen schalten. Ist es richtig? Wenn nicht, sagen Sie, wie Sie native Anzeigen eine Stunde lang zwischenspeichern können. –

Verwandte Themen