Criminosos comuns
De um modo geral, os ANRs são accionados porque a sua aplicação está a fazer o seguinte:
- Executar operações lentas com E/S no fio principal.
- Fazer cálculos longos na thread principal.
- Executar uma chamada de binder síncrona na thread principal e o outro processo está demorando a responder.
- Esperar na thread principal por outra thread que esteja realizando uma operação longa.
- Entubar em uma situação de deadlock. Os deadlocks podem acontecer na thread principal quando se está esperando recursos que outro processo não liberou, então não pode adquirir os recursos necessários. Estes outros processos podem estar em outro thread, seu processo, ou em uma chamada binder.
Técnicas de diagnóstico
Utilizar modo estrito
Com StrictMode
você pode encontrar operações de E/S acidentais.
Ler mais sobre
StrictMode
na documentação oficial.
Ativar diálogos ANR de fundo nas opções do desenvolvedor
Nem todos os ANRs são visíveis para o usuário; portanto, a aplicação pode estar enfrentando problemas de desempenho sem que o usuário perceba. Habilitar diálogos de ANR em segundo plano nas opções do desenvolvedor.
Inspectar arquivos de rastreamento usando adb
Arquivos de rastreamento são gerados em um evento ANR. Você pode puxar esses arquivos usando o Android Debug Bridge (adb) como root usando os seguintes comandos:
adb rootadb shell ls /data/anradb pull /data/anr/<filename>