Błędy aplikacji nie odpowiada (ANR) są wyzwalane, gdy wątek interfejsu użytkownika aplikacji nie odpowiada przez dłużej niż
Dodatkowo Crashlytics może pomóc wskazać konkretne problematyczne wątki. Analizujemy błędy ANR, a następnie w panelu kontrolnym Crashlytics tagujemy odpowiednie wątki, aby zapewnić wskazówki dotyczące debugowania błędu ANR.
W poniższych sekcjach tej strony wyjaśniono, co oznacza każdy znacznik ANR, przedstawiono przykładowy błąd ANR z tym znacznikiem i przedstawiono zalecane rozwiązanie umożliwiające debugowanie błędu ANR.
Triggered ANR
Wątek, który był blokowany zbyt długo i spowodował błąd ANR, jest oznaczony tą adnotacjąTriggered ANR
.
Problematycznym wątkiem może być główny wątek aplikacji lub dowolny wątek, który nie odpowiada. Jednak wątek oznaczony jakoTriggered ANR
może, ale nie musi, być rzeczywistą przyczyną błędu ANR. Aby zapewnić wgląd w debugowanie i naprawianie tych błędów ANR, Crashlytics oznacza również wszelkie inne wątki biorące udział w błędzie ANR. W kolejnych sekcjach tej strony dowiesz się o innych tagach, które można zastosować do wątku.
Deadlocked
Wszystkie wątki, w których stwierdzono zakleszczenie prowadzące do błędu ANR, są oznaczone tą adnotacjąDeadlocked
tag.
Zakleszczenie występuje, gdy wątek przechodzi w stan oczekiwania, ponieważ wymagany zasób jest wstrzymywany przez inny wątek, który również czeka na zasób przetrzymywany w pierwszym wątku. Jeśli główny wątek aplikacji znajduje się w takiej sytuacji, prawdopodobnie wystąpią błędy ANR.
Rekomendacje
Przyjrzyj się wątkom zaangażowanym w impas i sprawdź zasoby/blokady uzyskane przez te wątki. Aby poznać możliwe rozwiązania, zobacz Algorytmy zapobiegania zakleszczeniom i zakleszczeniom.
IO Root blocking
Każdy wątek, który wykonywał powolne operacje we/wy i blokował plikTriggered ANR
jest oznaczony adnotacjąIO Root blocking
. JeśliTriggered ANR
nie jest blokowany przez inne wątki, wówczasIO Root blocking
jest również aRoot blocking
.
Rekomendacje
Ogólnie rzecz biorąc, aplikacja nie powinna wykonywać kosztownych operacji we/wy w głównym wątku. W przypadku wątku głównegoIO Root blocking
, możesz także użyć trybu ścisłego , aby zidentyfikować wszelkie niezamierzone operacje we/wy, które mają miejsce w głównym wątku.
Root blocking
Każdy wątek, który zablokował wątek oznaczony jakoTriggered ANR
jest oznaczony symbolemRoot blocking
. Jeśli wątek jest oznaczony jako obaRoot blocking
iTriggered ANR
, wtedy nie ma innych wątków blokujących ten wątek.
Jeśli w ogóleTriggered ANR
czekały (być może przejściowo) na inne wątki, rzeczywiścieRoot blocking
. Może istnieć wiele powodów, dla których wątek jest główną przyczyną błędu ANR.
Rekomendacje
Zminimalizuj obciążającą procesor pracę w głównym wątku. Użyj wątków roboczych lub wątków w tle do wykonywania zadań intensywnie korzystających z procesora.
Zminimalizuj intensywne prace we/wy, takie jak ładowanie z bazy danych, w głównym wątku.
Unknown root cause
Wątek jest oznaczony tagiemUnknown root cause
, jeśli to wątek wyzwolił błąd ANR, ale w momencie wystąpienia błędu ANR był on bezczynny. Crashlytics nie ma wystarczających informacji, aby określić pierwotną przyczynę. Nie ma wyraźnego powodu wystąpienia tego błędu ANR.
Rekomendacje
Postępuj zgodnie z ogólnymi wskazówkami dotyczącymi zapobiegania błędom ANR. Na przykład zidentyfikuj miejsca w kodzie, w których główny wątek aplikacji może być zajęty dłużej niż