2010-09-13 2 views
1

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

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

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

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

+0

Основной поток отключен в иерархии представления, обновляющей экран. У вас есть данные ANR из logcat? – fadden

+0

добавил его выше. – schwiz

+0

Я заметил, что последнее, что делал Майн, это рисование BitmapDrawable на холсте. Что это за рисование этого растрового изображения, которое может привести к зависанию основного потока? Какие методы вы используете для заполнения ваших изображений изображениями? – magaio

ответ

5

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^