Debuguj swoją aplikację na Androida w oparciu o tagi ANR w panelu kontrolnym Crashlytics

Błędy aplikacji nie odpowiada (ANR) są wyzwalane, gdy wątek interfejsu użytkownika aplikacji nie odpowiada przez dłużej niż 5 sekund . Więcej o błędach ANR i diagnozowaniu błędów ANR możesz przeczytać w dokumentacji Androida .

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 jako Triggered 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ł plik Triggered ANR jest oznaczony adnotacją Znacznik IO Root blocking . Jeśli Triggered ANR nie jest blokowany przez inne wątki, wówczas Wątek IO Root blocking jest również a Gwint Root 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łównego IO 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 jako Triggered ANR jest oznaczony symbolem Znacznik Root blocking . Jeśli wątek jest oznaczony jako oba Root blocking i Triggered ANR , wtedy nie ma innych wątków blokujących ten wątek.

Jeśli w ogóle Triggered ANR czekały (być może przejściowo) na inne wątki, rzeczywiście Root 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 tagiem Unknown 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ż 5 sekund .