Almindelige syndere
Generelt udløses ANR’er, fordi dit program gør følgende:
- Udfører langsomme operationer med I/O på hovedtråden.
- Udfører lange beregninger i hovedtråden.
- Udfører et synkront binderkald i hovedtråden, og den anden proces tager tid om at svare.
- Venter i hovedtråden på en anden tråd, der udfører en lang operation.
- Stuck i en deadlock-situation. Deadlocks kan opstå i hovedtråden, når den venter på ressourcer, som en anden proces ikke har frigivet, så den ikke kan få de ressourcer, den har brug for, og derfor kan den ikke få de nødvendige ressourcer. Disse andre processer kan være i en anden tråd, din proces eller i et binderkald.
Diagnoseteknikker
Brug strict mode
Med StrictMode
kan du finde utilsigtede I/O-operationer.
Læs mere om
StrictMode
i den officielle dokumentation.
Aktiver ANR-dialoger i baggrunden i udviklerindstillinger
Det er ikke alle ANR’er, der er synlige for brugeren; derfor kan programmet have problemer med ydeevnen, uden at brugeren er klar over det. Aktiver ANR-dialoger i baggrunden i udviklerindstillingerne.
Inspicer sporingsfiler ved hjælp af adb
Sporingsfiler genereres i en ANR-hændelse. Du kan hente disse filer ved hjælp af Android Debug Bridge (adb) som root ved at bruge følgende kommandoer:
adb rootadb shell ls /data/anradb pull /data/anr/<filename>