Colpevoli comuni
Generalmente, gli ANR sono innescati perché la tua applicazione sta facendo quanto segue:
- Eseguire operazioni lente con I/O sul thread principale.
- Effettuando lunghi calcoli sul thread principale.
- Effettuando una chiamata sincrona al binder nel thread principale e l’altro processo sta impiegando del tempo per rispondere.
- Aspettando nel thread principale un altro thread che sta eseguendo una lunga operazione.
- Incastrato in una situazione di deadlock. I deadlock possono verificarsi nel thread principale quando è in attesa di risorse che un altro processo non ha rilasciato, quindi non può acquisire le risorse di cui ha bisogno. Questi altri processi possono essere in un altro thread, nel tuo processo o in una chiamata al binder.
Tecniche di diagnosi
Usa la modalità strict
Con StrictMode
puoi trovare operazioni I/O accidentali.
Leggi di più su
StrictMode
nella documentazione ufficiale.
Abilita i dialoghi ANR in background nelle opzioni dello sviluppatore
Non tutti gli ANR sono visibili all’utente; quindi, l’applicazione potrebbe avere problemi di prestazioni senza che l’utente se ne renda conto. Abilita le finestre di dialogo ANR in background nelle opzioni sviluppatore.
Esplora i file di traccia usando adb
I file di traccia sono generati in un evento ANR. È possibile estrarre questi file utilizzando Android Debug Bridge (adb) come root utilizzando i seguenti comandi:
adb rootadb shell ls /data/anradb pull /data/anr/<filename>