LeakCanary für Kotlin: Komplettguide mit Beispielen
In der Android-Entwicklung ist das Speichermanagement eine der kritischsten Aufgaben. Memory Leaks treten auf, wenn ein Objekt, das die App nicht mehr benötigt, aufgrund von versteckten Referenzen im Speicher gehalten wird. Das führt zu steigendem Speicherverbrauch, häufigen GC (Garbage Collection)-Pausen, Verzögerungen und letztendlich zu OutOfMemoryError und App-Abstürzen. LeakCanary ist eine Open-Source-Bibliothek von Square, die automatisch Memory Leaks in Android-Apps mit Java und Kotlin erkennt.
Warum ist das wichtig? Das manuelle Debuggen von Leaks ist komplex und zeitaufwendig – es erfordert tiefes JVM-Verständnis, Heap-Dump-Analysen und Profiler wie den Android Studio Profiler oder MAT. LeakCanary übernimmt diese Arbeit komplett: Es überwacht automatisch den Lebenszyklus von Activity, Fragment, ViewModel und anderen Komponenten. Wird eine Komponente nach der Zerstörung nicht vom Garbage Collector entfernt, erstellt die Bibliothek einen Heap-Dump, analysiert ihn und liefert einen fertigen Bericht mit der genauen Referenzkette, die zum Leak führt. So können Entwickler Probleme schnell finden und beheben, ohne Stunden mit manuellen Analysen zu verbringen.
LeakCanary wird als Bibliothek in die App integriert und läuft im Hintergrund. Es beeinträchtigt die Benutzererfahrung nicht, liefert dem Entwickler aber (im Debug-Build) Benachrichtigungen und detaillierte Logs. Seit Version 2.x wurde die Bibliothek komplett in Kotlin neu geschrieben – leistungsfähiger und einfacher in der Anwendung. Sie unterstützt die neuesten Android-Architekturkomponenten (Jetpack) und ermöglicht die Anpassung des Leak-Erkennungsprozesses.
Installation
LeakCanary wird über Maven Central bereitgestellt. Fügen Sie die Abhängigkeit in Ihre build.gradle.kts-Datei (oder build.gradle) Ihres Moduls (app) ein.
Wichtig: LeakCanary ist ausschließlich für Debug-Builds gedacht. Binden Sie es niemals in die Release-Version Ihrer App ein, da dies die Leistung und Sicherheit beeinträchtigen kann.
// build.gradle.kts (Module :app)
dependencies {
// debugImplementation – die Bibliothek ist nur im Debug-Build verfügbar
debugImplementation("com.squareup.leakcanary:leakcanary-android:2.14")
// Für Jetpack Navigation (optional)
debugImplementation("com.squareup.leakcanary:leakcanary-android-navigation:2.14")
// Für Process Lifecycle (optional)
debugImplementation("com.squareup.leakcanary:leakcanary-android-process:2.14")
}
Nach der Gradle-Synchronisation registriert LeakCanary automatisch seinen ContentProvider beim App-Start. Eine zusätzliche Initialisierung im Code ist nicht erforderlich.
Schnellstart
Ein minimales funktionierendes Beispiel ist einfach die Installation der Bibliothek. Danach erkennt LeakCanary automatisch Memory Leaks.
1. Installieren Sie die Bibliothek wie oben beschrieben.
2. Starten Sie die App im Debug-Modus.
3. Führen Sie eine Aktion aus, die einen Leak verursachen könnte (z. B. Bildschirm drehen, wenn ein Activity-Leak vorliegt).
4. Wird ein Leak erkannt, sehen Sie eine Systembenachrichtigung:

5. Tippen Sie auf die Benachrichtigung, um den detaillierten Bericht (Heap Dump Info) zu öffnen.
Beispielcode, der einen Leak erzeugt (zum Testen):
// Beispiel für einen Leak: statische Referenz auf eine Activity
class LeakyActivity : AppCompatActivity() {
companion object {
// Die statische Referenz verhindert, dass die Activity vom GC erfasst wird
var leakedActivity: Activity? = null
}
override fun onCreate(savedInsta