Jetpack Compose-Implementierung
Auf dieser Seite finden Sie Informationen zum Auffinden und Auslösen von Speicherlecks, die nur für View-basierte Layouts gelten. Die wichtigsten Informationen zum Erfassen und Analysieren von Heap-Dumps finden Sie unter Heap-Dump erfassen.
Speicherlecks finden
Wenn Sie schnell nach Klassen filtern möchten, die möglicherweise mit Speicherlecks in Verbindung stehen, öffnen Sie das Drop-down-Menü für die Klasse und wählen Sie Show activity/fragment leaks (Aktivitäts-/Fragmentlecks anzeigen) aus. In Android Studio werden Klassen angezeigt, die nach Ansicht von Android Studio auf Speicherlecks für Activity- und Fragment-Instanzen in Ihrer App hinweisen. Der Filter zeigt unter anderem die folgenden Datentypen an:
Activity-Instanzen, die zerstört wurden, auf die aber weiterhin verwiesen wird.Fragment-Instanzen ohne gültigesFragmentManager, auf die aber weiterhin verwiesen wird.
Beachten Sie, dass der Filter in den folgenden Situationen möglicherweise falsch-positive Ergebnisse liefert:
- Ein
Fragmentwurde erstellt, aber noch nicht verwendet. - Eine
Fragmentwird im Cache gespeichert, aber nicht als Teil einerFragmentTransaction.
Wenn Sie manueller nach Arbeitsspeicherlecks suchen möchten, sehen Sie sich die Klassen- und Instanzlisten an, um Objekte mit einer großen Retained Size (Beibehaltener Speicherplatz) zu finden. Suchen Sie nach Speicherlecks, die durch Folgendes verursacht werden:
- Langfristige Verweise auf
Activity,Context,View,Drawableund andere Objekte, die möglicherweise einen Verweis auf denActivity- oderContext-Container enthalten. - Nicht statische innere Klassen, z. B.
Runnable, die eineActivity-Instanz enthalten können. - Caches, in denen Objekte länger als nötig gespeichert werden.
Wenn Sie potenzielle Speicherlecks finden, können Sie auf den Tabs Felder und Referenzen in Instanzdetails zur entsprechenden Instanz oder Quellcodezeile springen.
Speicherlecks zu Testzwecken auslösen
Um Speicherlecks zu provozieren, die Sie in Ihrer App testen können, haben Sie folgende Möglichkeiten:
- Drehe das Gerät mehrmals vom Hoch- ins Querformat und wieder zurück, während es sich in verschiedenen Aktivitätsstatus befindet. Wenn das Gerät gedreht wird, kann es häufig zu einem Speicherleck in einer App kommen, das durch ein
Activity-,Context- oderView-Objekt verursacht wird, da das System dasActivityneu erstellt. Wenn Ihre App an anderer Stelle einen Verweis auf eines dieser Objekte enthält, kann das System es nicht bereinigen. - Wechseln Sie zwischen Ihrer App und einer anderen App, während sich die Apps in verschiedenen Aktivitätsstatus befinden. Rufen Sie beispielsweise den Startbildschirm auf und kehren Sie dann zu Ihrer App zurück.