Culpas comunes
Generalmente, los ANR se disparan porque su aplicación está haciendo lo siguiente:
- Realizando operaciones lentas con E/S en el hilo principal.
- Realizando cálculos largos en el hilo principal.
- Realizando una llamada binder síncrona en el hilo principal y el otro proceso está tardando en responder.
- Esperando en el hilo principal a otro hilo que está realizando una operación larga.
- Atrapado en una situación de deadlock. Los bloqueos pueden ocurrir en el hilo principal cuando está esperando recursos que otro proceso no ha liberado, por lo que no puede adquirir los recursos que necesita. Estos otros procesos pueden estar en otro hilo, en su proceso o en una llamada al binder.
Técnicas de diagnóstico
Usa el modo estricto
Con StrictMode
puedes encontrar operaciones de E/S accidentales.
Lea más sobre
StrictMode
en la documentación oficial.
Habilitar diálogos ANR en segundo plano en las opciones de desarrollador
No todos los ANR son visibles para el usuario; por lo tanto, la aplicación puede estar enfrentando problemas de rendimiento sin que el usuario se dé cuenta. Habilite los diálogos ANR en segundo plano en las opciones de desarrollador.
Inspeccione los archivos de rastreo utilizando adb
Los archivos de rastreo se generan en un evento ANR. Puede extraer estos archivos utilizando Android Debug Bridge (adb) como root mediante los siguientes comandos:
adb rootadb shell ls /data/anradb pull /data/anr/<filename>