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