Я изучал android в течение последних нескольких месяцев, поэтому я далеко не эксперт, но я действительно разочарован документацией по ANR.
Большая часть рекомендаций, похоже, направлена на то, чтобы их избегать или исправлять, слепо просматривая ваш код, и это здорово, но я ничего не смог найти при анализе трассировки.
Есть три вещи, которые вам действительно нужно искать в журналах ANR.
1) Взаимные блокировки: когда поток находится в состоянии WAIT, вы можете просмотреть подробную информацию, чтобы выяснить, кто является «holdby =». Большую часть времени он будет удерживаться сам по себе, но если он удерживается другим потоком, это может быть признаком опасности. Иди посмотри на эту ветку и посмотри, чем она держится. Вы можете найти петлю, которая является явным признаком того, что что-то пошло не так. Это довольно редко, но это первый момент, потому что когда это происходит, это кошмар
2) Основной поток Ожидание: если ваш основной поток находится в состоянии WAIT, проверьте, не поддерживается ли он другим потоком. Этого не должно быть, потому что ваш поток пользовательского интерфейса не должен удерживаться фоновым потоком.
Оба эти сценария означают, что вам необходимо значительно переработать код.
3) Тяжелые операции в главном потоке: это наиболее распространенная причина ANR, но иногда ее труднее найти и исправить. Посмотрите на основные детали темы. Прокрутите трассировку стека и пока не увидите классы, которые вы узнаете (из вашего приложения). Посмотрите на методы в трассировке и выясните, выполняете ли вы сетевые вызовы, вызовы БД и т. Д. В этих местах.
Наконец, и я прошу прощения за бесстыдное подключение моего собственного кода, вы можете использовать анализатор журналов python, который я написал на https://github.com/HarshEvilGeek/Android-Log-Analyzer Это будет проходить через ваши файлы журналов, открывать файлы ANR, находить тупики, находить основные потоки ожидания найдите неперехваченные исключения в журналах вашего агента и распечатайте их на экране относительно легко читаемым способом. Прочитайте файл ReadMe (который я собираюсь добавить), чтобы узнать, как его использовать. Это помогло мне за последнюю неделю!