Помогите прочитать следы стека ANR в Android - PullRequest
1 голос
/ 14 сентября 2010

Я уже некоторое время сражаюсь с ANR, происходящим в одном из моих сервисов. Воспроизвести его очень сложно, и пользовательский интерфейс, кажется, имеет полную функциональность, прежде чем это происходит в 100% случаев, когда никогда не бывает заметных задержек или зависаний. У моего сервиса есть TimerTask и несколько AsyncTask, которые он запускает и все.

Трассировки стека, которые я получаю, когда вы сообщаете об этом в Android Market в версии 2.2, трудно читаются, кажется, что нет ссылки на какой-либо мой код напрямую, а только из классов в SDK. Может кто-нибудь взглянуть на трассировку стека и посмотреть, если вы можете сказать, что происходит.

Распечатка настолько велика, что я решил отправить ее на pastebin, надеюсь, это не противоречит правилам. http://pastebin.com/KHUD0UHW

Вот и журнал Logcat http://pastebin.com/V5xSey36

1 Ответ

5 голосов
/ 21 сентября 2010

Возможно, это не ошибка ваших приложений. ANR обнаруживается для любого текущего приложения. Однако, если другое приложение в системе действительно загружало ваш процессор и заставляло ваше приложение голодать, ваше приложение получит ANR, потому что оно имеет фокус пользователя. Если это ситуация, вы ничего не можете сделать. Возможно, лучший способ проверить это - наблюдать или заставлять систему выполнять синхронизацию. Синхронизация, как правило, довольно тяжелая на телефоне и может вызвать плохую задержку на менее мощных телефонах.

Еще один способ проверить, работает ли у вас более медленный телефон, - это установить на рынке большое приложение. Как только он перейдет к фазе «Установка» после загрузки, сделайте что-нибудь немного более интенсивное в своем приложении. Если фаза установки занимает больше 5 секунд или около того, у вашего приложения есть неплохой шанс получить ANR. Это из-за плохой скорости ввода-вывода при установке приложения. IO блокирует другие приложения от получения процессорного времени. Android думает, что это значит, что вы его крадете.

...