Częste przyczyny
Zwykle ANR są wywoływane, ponieważ Twoja aplikacja wykonuje następujące czynności:
- Wykonywanie powolnych operacji we/wy w głównym wątku.
- Wykonywanie długich obliczeń na głównym wątku.
- Wykonywanie synchronicznego wywołania bindera w głównym wątku, a inny proces potrzebuje czasu na odpowiedź.
- Oczekiwanie w głównym wątku na inny wątek, który wykonuje długą operację.
- Utknięcie w sytuacji impasu. Martwe punkty mogą wystąpić w głównym wątku, gdy czeka on na zasoby, których inny proces nie zwolnił, więc nie może zdobyć potrzebnych mu zasobów. Te inne procesy mogą znajdować się w innym wątku, twoim procesie lub w wywołaniu bindera.
Techniki diagnozowania
Użyj trybu ścisłego
Z pomocą StrictMode
możesz znaleźć przypadkowe operacje wejścia/wyjścia.
Czytaj więcej o
StrictMode
w oficjalnej dokumentacji.
Włącz okna dialogowe ANR w tle w opcjach programisty
Nie wszystkie ANR są widoczne dla użytkownika; dlatego aplikacja może mieć problemy z wydajnością bez świadomości użytkownika. Włącz okna dialogowe ANR w tle w opcjach dewelopera.
Przeglądaj pliki śladów za pomocą adb
Pliki śladów są generowane w zdarzeniu ANR. Możesz wyciągnąć te pliki używając Android Debug Bridge (adb) jako root używając następujących komend:
adb rootadb shell ls /data/anradb pull /data/anr/<filename>
.