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

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

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

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

Triggered ANR

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

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

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

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

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

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