LeakCanary para Kotlin: guía completa con ejemplos prácticos
En el desarrollo de aplicaciones Android, la gestión de la memoria es una de las tareas más críticas. Las fugas de memoria (memory leaks) ocurren cuando un objeto que la aplicación ya no necesita sigue ocupando espacio en la memoria debido a referencias implícitas. Esto provoca un aumento en el consumo de memoria, pausas frecuentes del GC (Garbage Collection), lentitud y, finalmente, un OutOfMemoryError que hace que la aplicación se cierre. LeakCanary es una biblioteca de código abierto creada por Square que detecta automáticamente las fugas de memoria en aplicaciones Android escritas en Java y Kotlin.
¿Para qué sirve? Depurar fugas de memoria manualmente es un proceso complejo y laborioso que requiere un conocimiento profundo de la JVM, análisis de heap dumps y el uso de herramientas como Android Studio Profiler o MAT. LeakCanary se encarga de todo ese trabajo: monitorea automáticamente el ciclo de vida de Activities, Fragments, ViewModels y otros componentes. Si alguno de ellos no es recolectado por el recolector de basura después de ser destruido, la biblioteca genera un heap dump, lo analiza y te entrega un informe completo con la cadena exacta de referencias que causó la fuga. Esto permite a los desarrolladores encontrar y corregir problemas rápidamente, sin perder horas en análisis manuales.
LeakCanary se integra en la aplicación como una biblioteca y funciona en segundo plano. No afecta la experiencia del usuario, pero le proporciona al desarrollador (en la compilación debug) notificaciones y registros detallados. A partir de la versión 2.x, la biblioteca fue reescrita completamente en Kotlin, volviéndose más eficiente y fácil de usar. Es compatible con los componentes de arquitectura más recientes de Android (Jetpack) y permite personalizar el proceso de detección de fugas.
Instalación
LeakCanary se distribuye a través de Maven Central. Para instalarlo, agrega la dependencia en el archivo build.gradle.kts (o build.gradle) de tu módulo (app).
Importante: LeakCanary está diseñado exclusivamente para compilaciones debug. Nunca lo incluyas en la versión release de tu aplicación, ya que podría afectar el rendimiento y la seguridad.
// build.gradle.kts (Module :app)
dependencies {
// debugImplementation — la biblioteca solo estará disponible en compilaciones debug
debugImplementation("com.squareup.leakcanary:leakcanary-android:2.14")
// Para soporte de Jetpack Navigation (opcional)
debugImplementation("com.squareup.leakcanary:leakcanary-android-navigation:2.14")
// Para soporte de Process Lifecycle (opcional)
debugImplementation("com.squareup.leakcanary:leakcanary-android-process:2.14")
}
Después de sincronizar Gradle, LeakCanary registrará automáticamente su ContentProvider al iniciar la aplicación. No se requiere ninguna inicialización adicional en el código.
Inicio rápido
El ejemplo mínimo funcional es simplemente instalar la biblioteca. A partir de ahí, LeakCanary comenzará a monitorear automáticamente las fugas de memoria.
1. Instala la biblioteca como se describió anteriormente.
2. Ejecuta la aplicación en modo debug.
3. Realiza una acción que pueda causar una fuga (por ejemplo, gira la pantalla si hay una fuga de Activity).
4. Si se detecta una fuga, verás una notificación del sistema:

5. Toca la notificación para abrir la pantalla con el informe detallado (Heap Dump Info).
Ejemplo de código que genera una fuga para fines de prueba:
// Ejemplo de fuga: referencia estática a una Activity
class LeakyActivity : AppCompatActivity() {
companion object {
// La referencia estática impedirá que la Activity sea recolectada por el GC
var leakedActivity: Activity? = null
}
override fun onCreate(savedInsta