jambit Toilet Paper Memory Leaks in Android-Apps

Memory Leaks in Android-Apps frühzeitig erkennen mit der LeakCanary Library

Problem: Memory Leaks sind schwer zu erkennen

Niemand mag Memory Leaks. Sie sind meist schwer zu reproduzieren, noch schwerer zu identifizieren und machen sich im schlimmsten Fall erst mit einer OutOfMemoryException nach langer Benutzung bemerkbar.

Lösung: Android Studio und die LeakCanary Library

Detecting Memory Leaks in Android Studio

Unter Android gibt es glücklicherweise mehrere Möglichkeiten, Leaks zu erkennen. Eine Möglichkeit hierzu bietet Android Studio bereits intern an: Mit Hilfe des Profilers kann der Java Heap angezeigt und anschließend analysiert werden. Seit Android Studio 3.6 kann dieser auch speziell nach nicht mehr existenten, aber immer noch referenzierten Activities/Fragments gefiltert werden (Activity/Fragment Leaks). Dabei werden neben den bestehenden Instanzen auch die Referenzen auf selbige angezeigt, wodurch Rückschlüsse auf Leaks gezogen werden können. Der oben angezeigte Screenshot zeigt eine Beispielanwendung, bei welcher innerhalb eines Singleton die Referenz auf eine Activity gehalten wird, wodurch diese anschließend vom Garbage Collector nicht mehr aufgeräumt werden kann.

Eine weit komfortablere Lösung bietet die Library LeakCanary an. Bei dieser wird in Debug-Builds eine WeakReference auf verschiedene Instanzen erstellt (beispielsweise auf Activities in der onActivityDestroyed-Methode). Ein Background-Thread überprüft anschließend, ob die Referenz (nach dem Ausführen des Garbage Collectors) aufgeräumt wurde. Falls nein wird der Heap in einer .hprof-Datei gespeichert. Dieser wird in einem separaten Prozess unter Zuhilfenahme der vorherigen WeakReference analysiert und die Kette an Referenzen berechnet, welche das Objekt davon abhalten, seinen Speicher freizugeben. Mögliche Ursachen für den Memory-Leak werden dabei von LeakCanary durch eine rote Wellenlinie hervorgehoben. Somit ist es auf recht einfache Weise möglich, Leaks bereits frühzeitig zu erkennen und deren Herkunft effizient einzugrenzen.

Detecting Memory Leaks with LeakCanary Library

Weiterführende Aspekte

---

Autor: Kevin Stieglitz / Software Engineer / Business Division Automotive World​

Early detection of memory leaks in Android apps with the LeakCanary Library

Wir verwenden Cookies, um unsere Webseite für Sie zu optimieren. Mit dem Besuch unserer Webseite erklären Sie sich damit einverstanden. // Our website is using cookies to improve your experience. By continuing to browse the site, you are agreeing to our use of cookies.

Weitere Informationen finden Sie in unserer Datenschutzerklärung. // For more information, please refer to our privacy policy.