Отладка приложения Android на основе тегов ANR на панели инструментов Crashlytics.

Application Not Responding (ANR) errors are triggered when the UI thread of the application is not responding for more than 5 seconds . You can read more about ANRs and diagnosing ANRs in the Android documentation .

Additionally, Crashlytics can help pinpoint specific problematic threads. We analyze ANRs, and then, in the Crashlytics dashboard , we tag applicable threads to provide hints on how to debug the ANR.

В следующих разделах этой страницы объясняется значение каждого тега ANR, приводятся примеры ANR с этим тегом и предлагаются рекомендуемые решения для отладки ANR.

Triggered ANR

Поток, заблокированный слишком долго и вызвавший ошибку ANR, помечается этой аннотацией. Triggered ANR .

Проблемным потоком может быть основной поток приложения или любой другой поток, который не отвечает. Однако поток, помеченный как Triggered ANR may or may not be the actual cause of the ANR. To provide insights for debugging and fixing these ANRs, Crashlytics also tags any other threads that are involved in the ANR. In the following sections of this page, learn about the other tags that could be applied to a thread.

Deadlocked

Все потоки, в которых обнаружена взаимоблокировка, приведшая к ошибке ANR, помечаются этой аннотацией. Метка Deadlocked .

A deadlock occurs when a thread enters a waiting state because a required resource is held by another thread, which is also waiting for a resource held by the first thread. If the app's main thread is in this situation, ANRs are likely to happen.

Рекомендация

Проанализируйте потоки, участвующие в тупиковой ситуации, и проверьте ресурсы/блокировки, захваченные этими потоками. Обратитесь к алгоритмам предотвращения тупиковых ситуаций для поиска возможных решений.

IO Root blocking

Любой поток, выполнявший медленные операции ввода-вывода и блокировавший их, Triggered ANR помечается аннотацией. IO Root blocking . Если Triggered ANR не блокируется другими потоками, то... IO Root blocking также является Root blocking поток.

Рекомендация

В целом, ваше приложение не должно выполнять дорогостоящие операции ввода-вывода в основном потоке. В случае, если основной поток... IO Root blocking можно также использовать строгий режим , чтобы выявить любые непреднамеренные операции ввода-вывода, происходящие в основном потоке.

Root blocking

Любая тема, которая заблокировала тему, помеченную как Triggered ANR обозначается следующим образом: Root blocking тег. Если ветка помечена обоими тегами. Root blocking и Triggered ANR , то нет других потоков, которые блокируют этот поток.

Если таковые имеются Triggered ANR ожидали (возможно, транзитивно) другие потоки, они находятся Root blocking . Причин, по которым поток может быть основной причиной ANR, может быть множество.

Рекомендация

Сведите к минимуму ресурсоемкие задачи в основном потоке. Используйте рабочие или фоновые потоки для выполнения ресурсоемких задач.

Сведите к минимуму ресурсоемкие операции ввода-вывода, такие как загрузка данных из базы данных, в основном потоке.

Unknown root cause

Тема помечена тегом Unknown root cause tag if it was the thread that triggered the ANR but was idle in the process when the ANR occurred. Crashlytics doesn't have sufficient information to determine the root cause. There is no evident reason why this ANR has occurred.

Рекомендация

Следуйте общим рекомендациям по предотвращению ошибок ANR. Например, определите места в вашем коде, где основной поток приложения может быть занят более 5 секунд .