«ANR» - исключение или ошибка или что? - PullRequest
24 голосов
/ 30 июня 2011

ANR - исключение, ошибка или что?Можем ли мы поймать это в try{} catch(){} структуре?

Ответы [ 2 ]

46 голосов
/ 30 июня 2011

ANR (приложение не отвечает) не является точно ошибкой.Он отображается, когда ваше приложение очень вялое и требует много времени для ответа, что заставляет пользователя ждать.Пользователь не оценит, если ваше приложение заставит их долго ждать.Таким образом, платформа Android дает пользователю возможность закрыть ваше приложение.http://developer.android.com/guide/practices/design/responsiveness.html

Это происходит, когда вы выполняете длительные операции в главном потоке.Система не может обрабатывать взаимодействия с пользователем в течение этого периода, так как основной поток заблокирован.Решение состоит в том, чтобы выполнять тяжелые операции в рабочем потоке и сохранять основной поток свободным.

3 голосов
/ 26 октября 2016

Диалог приложения не отвечает (ANR)

Как вы можете себе представить, если основной поток занят интенсивными вычислениями или чтением данных из сетевого сокета, он не может немедленно ответитьк пользовательскому вводу, такому как касание или пролистывание.

Приложение, которое не реагирует быстро на взаимодействие с пользователем, будет не отвечать на запросы - заметно больше, чем задержка в пару сотен миллисекунд.Это настолько пагубная проблема, что платформа Android защищает пользователей от приложений, которые делают слишком много в главном потоке.

Примечание:

Если приложение не отвечает наВвод пользователя в течение пяти секунд, пользователь увидит диалоговое окно «Приложение не отвечает» (ANR), и ему будет предложено выйти из приложения.

На следующем снимке экрана показан типичный диалог Android ANR:

enter image description here

Android усердно работает над синхронизацией перерисовок пользовательского интерфейса с частотой обновления оборудования.Это означает, что он нацелен на перерисовку со скоростью 60 кадров в секунду - это просто 16,67 мс на кадр.Если мы работаем с основным потоком, который занимает где-то около 16 мс, мы рискуем повлиять на частоту кадров, что приведет к рывкам - анимации заикания, резкой прокрутке и т. Д.Я не хочу бросать один кадр.Джанк, невосприимчивость, и особенно ANR, предлагают очень плохой пользовательский опыт, что приводит к плохим отзывам и непопулярным приложениям.Правило, которым следует придерживаться при создании приложений Android: не блокируйте основной поток!

Примечание:

Android предоставляет полезную настройку строгого режима в параметрах разработчика на каждомустройство, которое будет отображаться на экране, когда приложения выполняют длительные операции в главном потоке.

В платформу Honeycomb была добавлена ​​дополнительная защита (уровень API 11) с введением нового класса исключения, NetworkOnMainThreadExceptionподкласс RuntimeException, который генерируется, если система обнаруживает сетевую активность, инициированную в главном потоке.

Источник:

Асинхронное программирование для Android - второе издание - Helder Vasconcelos -Июль 2016

...