Middle+
¿Cómo detecta LeakCanary las referencias a Activities destruidas?
sobes.tech AI
Respuesta de la IA
LeakCanary utiliza una referencia débil (Referencia Fantasma) o una referencia fuerte (Referencia Fuerte) en un observador especial que "escucha" el ciclo de vida de la Activity. Cuando la Activity se destruye, LeakCanary registra el tiempo y espera a que el recolector de basura lo recoja. Si después de la recolección de basura el objeto Activity todavía existe en memoria, LeakCanary inicia un volcado de memoria (heap dump), lo analiza y construye un gráfico de alcanzabilidad para encontrar el camino desde las raíces del GC hasta esa Activity "filtrada".
Pasos clave:
- Monitoreo del ciclo de vida: LeakCanary registra
ActivityLifecycleCallbacks. - Marcado (Bookmarking): Al llamar a
onDestroy(), LeakCanary crea una referencia a la Activity (depende de la versión) y registra la hora. - Espera del GC: LeakCanary espera a que ocurra la recolección de basura para verificar si el objeto fue destruido.
- Verificación post-GC: Si el objeto Activity aún está accesible después del GC, indica una posible fuga.
- Volcado de memoria: LeakCanary llama a
Debug.dumpHprofData()para guardar el estado actual de la memoria. - Análisis del volcado: LeakCanary (a través de Memory Analyzer Tool (MAT) o su propio analizador) escanea el volcado de memoria.
- Búsqueda de camino: La herramienta encuentra caminos en el grafo de objetos desde los elementos raíz del recolector de basura (GC Roots) hasta el objeto "filtrado".
- Informe: LeakCanary genera un informe legible que muestra la cadena de referencias que mantiene el objeto fuera del recolector de basura.