Desarrollador Android: pregunta de entrevista
¿Cómo encuentras fugas de memoria en Android?
Encuentra fugas Android reproduciendo transiciones de ciclo de vida, observando objetos retenidos con LeakCanary o heap dump y siguiendo referencias, normalmente estado estático, callbacks, adapters o coroutines.
Respuesta directa
Qué debe cubrir una buena respuesta
Cómo funciona
Una fuga en Android es un objeto que sigue siendo alcanzable después de que terminó su ciclo de vida, casi siempre una Activity o un Fragment retenidos por algo que vive más: un campo estático, un listener en un singleton, un Handler con mensajes pendientes, una corrutina aún en marcha o una View referenciada desde un ViewModel. LeakCanary vigila los objetos destruidos y reporta la cadena de referencias fuertes más corta desde una raíz de GC cuando uno queda retenido. Para las fugas que no atrapa, un volcado de heap en el profiler de Android Studio filtrado por instancias de Activity tras varias navegaciones muestra lo que debería haber desaparecido.
Ejemplo
Tras rotar una pantalla diez veces el profiler mostró diez instancias de MapActivity; la cadena de referencias llevaba a un callback de ubicación registrado en un LocationManager de aplicación y nunca eliminado. Quitar el callback en onStop arregló la fuga, y una ejecución de LeakCanary en la build de debug ahora hace fallar CI si la Activity vuelve a quedar retenida.
Errores frecuentes
- Registrar un listener en un objeto de larga vida en onCreate y no quitarlo nunca.
- Guardar una View o un Context en un companion object por comodidad.
- Descartar los informes de LeakCanary como ruido en lugar de leer la cadena de referencias.
Una estructura útil para responder
Responde desde tu propia experiencia.
No memorices un guion: usa solo ejemplos que puedas explicar con honestidad en preguntas posteriores.
Abre el espacio de trabajo de escritorio y ensaya una respuesta clara con tus propias palabras.