Ошибки «Приложение не отвечает» (ANR) возникают, когда поток пользовательского интерфейса приложения не отвечает более
Кроме того, Crashlytics может помочь выявить конкретные проблемные темы. Мы анализируем ошибки ANR, а затем на панели управления Crashlytics помечаем соответствующие темы, чтобы предоставить подсказки о том, как отладить ошибку ANR.
В следующих разделах на этой странице объясняется, что означает каждый тег ANR, показан пример ANR с этим тегом и представлено рекомендуемое решение для отладки ANR.
Triggered ANR
Поток, который был заблокирован слишком долго и вызвал ошибку ANR, помечается этой пометкой.Triggered ANR
.
Проблемным потоком может быть основной поток приложения или любой поток, который не отвечает. Однако тема с тегомTriggered ANR
может быть фактической причиной 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
Тема помечается тегомUnknown root cause
, если это был поток, вызвавший ошибку ANR, но бездействовавший в процессе, когда возникла ошибка ANR. Crashlytics не располагает достаточной информацией для определения основной причины. Нет очевидной причины, по которой произошел этот ANR.
Рекомендация
Следуйте общим советам о том, как предотвратить ошибки ANR. Например, определите места в коде, где основной поток приложения может быть занят более