"ANR" - исключение или ошибка или что?
ANR - исключение, ошибка или что? Можем ли мы поймать это в try{} catch(){}
состав?
2 ответа
ANR (приложение не отвечает) не совсем ошибка. Он отображается, когда ваше приложение очень медленное и требует много времени для ответа, что заставляет пользователя ждать. Пользователь не оценит, если ваше приложение заставит их долго ждать. Таким образом, платформа Android предоставляет пользователю возможность закрыть ваше приложение. http://developer.android.com/guide/practices/design/responsiveness.html
Это происходит, когда вы выполняете длительные операции в основном потоке. Система не может обрабатывать взаимодействия с пользователем в течение этого периода, так как основной поток заблокирован. Решение состоит в том, чтобы выполнять тяжелые операции в рабочем потоке и сохранять основной поток свободным.
Диалог "Приложение не отвечает" (ANR)
Как вы можете себе представить, если основной поток занят интенсивными вычислениями или чтением данных из сетевого сокета, он не может немедленно реагировать на пользовательский ввод, такой как касание или пролистывание.
Приложение, которое не реагирует быстро на взаимодействие с пользователем, будет чувствовать себя не отвечающим - заметно больше, чем задержка в пару сотен миллисекунд. Это настолько пагубная проблема, что платформа Android защищает пользователей от приложений, которые делают слишком много в главном потоке.
Обратите внимание:
Если приложение не отвечает на вводимые пользователем данные в течение пяти секунд, пользователь увидит диалоговое окно "Приложение не отвечает" (ANR), и ему будет предложено выйти из приложения.
На следующем снимке экрана показан типичный диалог Android ANR:
Android усердно работает над синхронизацией перерисовок пользовательского интерфейса с частотой обновления оборудования. Это означает, что он нацелен на перерисовку со скоростью 60 кадров в секунду - это просто 16,67 мс на кадр. Если мы работаем с основным потоком, который занимает где-то около 16 мс, мы рискуем повлиять на частоту кадров, что приведет к рывкам - заиканию анимации, прерывистой прокрутке и так далее.
В идеале, конечно, мы не хотим отбрасывать ни одного кадра. Джанк, невосприимчивость, и особенно ANR, предлагают очень плохой пользовательский опыт, что приводит к плохим отзывам и непопулярным приложениям. Правило, которым следует придерживаться при создании приложений Android: не блокируйте основной поток!
Обратите внимание:
Android предоставляет полезную настройку строгого режима в параметрах разработчика на каждом устройстве, которая будет мигать на экране, когда приложения выполняют длительные операции в главном потоке.
Дополнительная защита была добавлена к платформе в Honeycomb (уровень API 11) с введением нового класса исключения NetworkOnMainThreadException, подкласса RuntimeException, который генерируется, если система обнаруживает сетевую активность, инициированную в основном потоке.
Источник:
Асинхронное программирование для Android - второе издание - Helder Vasconcelos - июль 2016