Häufige Schuldige
Im Allgemeinen werden ANRs ausgelöst, weil Ihre Anwendung Folgendes tut:
- Die Durchführung langsamer Operationen mit E/A im Hauptthread.
- Durchführen langer Berechnungen auf dem Haupt-Thread.
- Durchführen eines synchronen Binder-Aufrufs im Haupt-Thread und der andere Prozess braucht Zeit, um zu antworten.
- Warten im Haupt-Thread auf einen anderen Thread, der eine lange Operation durchführt.
- Hängenbleiben in einer Deadlock-Situation. Deadlocks können im Hauptthread auftreten, wenn er auf Ressourcen wartet, die ein anderer Prozess nicht freigegeben hat, so dass er die benötigten Ressourcen nicht erhalten kann. Diese anderen Prozesse können sich in einem anderen Thread, Ihrem Prozess oder in einem Binder-Aufruf befinden.
Diagnosetechniken
Verwenden Sie den strengen Modus
Mit StrictMode
können Sie versehentliche E/A-Operationen finden.
Lesen Sie mehr über
StrictMode
in der offiziellen Dokumentation.
Aktivieren Sie ANR-Dialoge im Hintergrund in den Entwickleroptionen
Nicht alle ANRs sind für den Benutzer sichtbar; daher kann die Anwendung mit Leistungsproblemen konfrontiert sein, ohne dass der Benutzer dies bemerkt. Aktivieren Sie ANR-Dialoge im Hintergrund in den Entwickleroptionen.
Überprüfen Sie Trace-Dateien mit adb
Trace-Dateien werden bei einem ANR-Ereignis erzeugt. Sie können diese Dateien mit der Android Debug Bridge (adb) als Root abrufen, indem Sie die folgenden Befehle verwenden:
adb rootadb shell ls /data/anradb pull /data/anr/<filename>