Я искал в Интернете, что такое ANR. И я изучил эти ссылки. Но я не получаю подробностей относительно сбоя в Android.
Может ли кто-нибудь сказать мне разницу между ANR (Android не ответившим) и сбоем в Android?
Я искал в Интернете, что такое ANR. И я изучил эти ссылки. Но я не получаю подробностей относительно сбоя в Android.
Может ли кто-нибудь сказать мне разницу между ANR (Android не ответившим) и сбоем в Android?
ANR означает A применение N от R.
ANR будет возникать, если вы выполняете процесс в потоке пользовательского интерфейса, который занимает много времени, обычно около 5 секунд. За это время GUI (графический интерфейс пользователя) закроется, что приведет к тому, что пользовательские нажатия не будут действовать. По истечении 5 секунд, если поток по-прежнему не восстановлен, отображается диалоговое окно ANR, информирующее пользователя о том, что приложение не отвечает, и предоставит пользователю возможность либо ждать, в надежде, что приложение будет в конечном итоге восстановить или закрыть приложение.
Авария - это когда было исключено исключение из приложения, которое не было обработано. Например, если вы попытаетесь установить текст компонента EditText, но EditText имеет значение NULL, и нет инструкции try catch, чтобы поймать исключение, которое ваше приложение выйдет из строя и будет принудительно закрыто. Пользователь не увидит причину сбоя, ему будет показан диалог, в котором сообщается, что приложение неожиданно отключилось и предоставит им возможность отправить отчет об ошибке. В этом примере, если вы хотите посмотреть в отчете об ошибке, вы увидите ошибку, вызванную java.lang.NullPointerException.
Надеюсь, это поможет.
ANR (A pplication N ot R) из-за обработки long running task in Main Thread
(поток пользовательского интерфейса). Если основной поток остановлен более 5 секунд, вы получаете ANR.
Ошибка связаны с exception and error
как Nullpoint, classNotfound, typecast, ошибка синтаксического анализа и т.д. ANR также вызывает сбой приложения.
Примечание. Никогда не запускайте долго выполняющуюся задачу в потоке пользовательского интерфейса.
Ссылка ANR
ANR означает Application Not Responding, что означает, что ваше приложение не регистрирует события в потоке пользовательского интерфейса больше, потому что там выполняется длительная работа
ANR означает приложение, не отвечающее, и оно возникает, когда длительная операция происходит в основной теме......
Сбой вызваны исключением и ошибкой, например Nullpoint,
ANR: It is called when anything your application is doing in the UI thread that
takes a long time to complete (5 sec approx)
Ссылка: ANR
Crash: It is called when your Application gets some Error or Exception raised by the DVM
ANR также вызвано
Приложение не отвечает (ANR):
ANR будет отображаться в следующих условиях:
Ответ на входное событие (например, нажатие клавиши или экранное нажатие) в течение 5 секунд
Передатчик широковещательной передачи не завершил выполнение в течение 10 секунд.
Как избежать ANR?
Создайте другой рабочий поток для длительных операций, таких как операции с базой данных, сетевые операции и т.д.
Усиление ответной реакции: В приложении для Android обычно от 100 до 200 мс является пороговым значением, за которым пользователь будет чувствовать, что приложение работает медленно. Ниже приведены советы, по которым мы можем показать, что приложение более отзывчивое.
Показывать диалог выполнения, когда вы выполняете какую-либо фоновую работу, и пользователь ждет ответа.
Для игр специально выполняйте вычисления для ходов в рабочем потоке.
Краш: Авария является необработанным условием в приложении, и оно будет принудительно закрыть наше приложение. Некоторые из примеров сбоев похожи на исключение Nullpointer, исключение из-за незаконного состояния и т.д.
ANR означает Приложение не отвечает.
Это может произойти по многим причинам, например, если приложение блокирует некоторые операции ввода-вывода в потоке пользовательского интерфейса, поэтому система не может обрабатывать входящие события ввода пользователя. Или, возможно, приложение тратит слишком много времени на создание сложной структуры в памяти или вычисление следующего движения в потоке пользовательского интерфейса.
Блокировка основного потока не приведет к сбою, но появится всплывающее окно, позволяющее пользователям убивать приложение через 5 секунд.
Но для Crash главная причина - человеческие ошибки. Большую часть времени, когда приложение вылетает из-за ошибки кодирования/дизайна, сделанной человеком
Ошибки человека
Отсутствие тестирования
Исключение Null Pointer
OutOfMemory
Пример:
Это обычное явление, когда программист ссылается на объект или переменную, которая не существует, в основном создавая ошибку с нулевым указателем.
Если у вас плохое соединение, это также может привести к сбою ваших приложений. Приложение может также иметь проблемы с управлением памятью.
Пожалуйста, см. мой ответ для типа конкретного исключения для Android, которое может вызвать сбой.
Примеры ANR и Crash:
У этого вопроса уже есть принятый ответ, но я добавляю 2 простых примера, чтобы лучше понять ANR и Crash.
ANR:
// this will produce an ANR on your app
int i = 0;
while(true) {
i++;
}
Краш:
// this will crash your app : will produce java.lang.ArithmeticException
int value = 5, i = 0;
int result = value / i;
ANR для ex: если вы загружаете огромные данные в поток ui, другие другие возможности, такие как недостаточная память и т.д., это произойдет. Вероятно, это приводит к сбоям в android, мы не можем сказать, что оба они одинаковы для других
[ANR и Crash Different] [1] Приложения для Android обычно запускаются полностью на одном потоке по умолчанию "поток пользовательского интерфейса" или "основная нить". Это означает, что все, что делает ваше приложение в потоке пользовательского интерфейса, которое занимает много времени, может вызвать диалог ANR, потому что ваше приложение не дает возможности обрабатывать входные события или намеренные трансляции.
ANR: В основном из-за долгого выполнения основной темы.
При диагностировании ANR существуют некоторые общие шаблоны:
Следующие методы помогут вам выяснить, какая из этих причин вызывает ваши ANR.
CRASH:
Причиной возникновения сбоев может быть много. Некоторые причины очевидны, например, проверка нулевого значения или пустой строки, но другие более тонкие, например, передача недопустимых аргументов в API или даже сложные многопоточные взаимодействия.