Ошибки «Приложение не отвечает» (ANR) возникают, когда поток пользовательского интерфейса приложения не отвечает более
Кроме того, 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. Например, определите места в коде, где основной поток приложения может быть занят более