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

Ошибки Application Not Responding (ANR) возникают, когда поток пользовательского интерфейса приложения не отвечает более 5 секунд . Более подробную информацию об ошибках ANR и их диагностике можно найти в документации Android .

Кроме того, Crashlytics может помочь выявить конкретные проблемные потоки. Мы анализируем ошибки ANR, а затем на панели Crashlytics помечаем соответствующие потоки, чтобы предоставить подсказки по отладке ошибки ANR.

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

Triggered ANR

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

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

Deadlocked

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

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

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

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

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

Тема помечена тегом Если причиной возникновения ошибки ANR был поток, который находился в режиме ожидания в момент её возникновения, то тег Unknown root cause . Crashlytics не располагает достаточной информацией для определения первопричины. Нет очевидной причины возникновения этой ошибки ANR.

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

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