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