Intereting Posts
Создавать выталкиваемые из растрового изображения Android Studio Неожиданно начинает отображаться неспособность разрешить сообщения com.android.support … 25.0.0 и все мои java-файлы теперь ошибочны? Как использовать V4L или V4L2 (видео для Linux) в Android? Как поделиться всем Android-приложением с общим намерением Проверка целостности активов Android Android N Java 8 (компилятор Jack) и Kotlin interop Переход общего элемента с фрагментами с помощью add () вместо replace ()? Значение в edittext не отображается до тех пор, пока оно не начнет фокусироваться. Android Google IO Rest design pattern, законченный ContentProvider и застрял сейчас IndexOutOfBoundsException: charAt: 0> = длина 0 в некоторых версиях Android Как подать виджет DatePicker с другими календарными системами? Android Webview предоставляет сообщение net :: ERR_CACHE_MISS Удаление папок из DDMS Android разнородный gridview как pinterest? Пользовательское разрешение для Android отменено на основании заказа приложения

Является ли «ANR» исключением или ошибкой или что?

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

Solutions Collecting From Web of "Является ли «ANR» исключением или ошибкой или что?"

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

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

Диалоговое окно «Приложение не отвечает» (ANR)

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

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

Примечание:

Если приложение не отвечает на ввод пользователя в течение нескольких секунд, пользователь увидит диалоговое окно Application Not Responseing (ANR) и будет предложено выйти из приложения.

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

Введите описание изображения здесь

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

В идеале, конечно, мы не хотим бросать один кадр. Янк, невосприимчивость, и особенно ANR, предлагают очень плохой пользовательский опыт, что приводит к плохим отзывам и непопулярным приложениям. Правило для жизни при создании приложений для Android: не блокируйте основной поток!

Примечание:

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

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

Источник :

Асинхронное программирование на Android – второе издание – Хелдер Васконселос – июль 2016 года