Подтвердить что ты не робот

В чем разница между ANR и сбоем в Android?

Я искал в Интернете, что такое ANR. И я изучил эти ссылки. Но я не получаю подробностей относительно сбоя в Android.

Может ли кто-нибудь сказать мне разницу между ANR (Android не ответившим) и сбоем в Android?

4b9b3361

Ответ 1

ANR означает A применение N от R.

ANR будет возникать, если вы выполняете процесс в потоке пользовательского интерфейса, который занимает много времени, обычно около 5 секунд. За это время GUI (графический интерфейс пользователя) закроется, что приведет к тому, что пользовательские нажатия не будут действовать. По истечении 5 секунд, если поток по-прежнему не восстановлен, отображается диалоговое окно ANR, информирующее пользователя о том, что приложение не отвечает, и предоставит пользователю возможность либо ждать, в надежде, что приложение будет в конечном итоге восстановить или закрыть приложение.

Авария - это когда было исключено исключение из приложения, которое не было обработано. Например, если вы попытаетесь установить текст компонента EditText, но EditText имеет значение NULL, и нет инструкции try catch, чтобы поймать исключение, которое ваше приложение выйдет из строя и будет принудительно закрыто. Пользователь не увидит причину сбоя, ему будет показан диалог, в котором сообщается, что приложение неожиданно отключилось и предоставит им возможность отправить отчет об ошибке. В этом примере, если вы хотите посмотреть в отчете об ошибке, вы увидите ошибку, вызванную java.lang.NullPointerException.

Надеюсь, это поможет.

Ответ 2

ANR (A pplication N ot R) из-за обработки long running task in Main Thread (поток пользовательского интерфейса). Если основной поток остановлен более 5 секунд, вы получаете ANR.

Ошибка связаны с exception and error как Nullpoint, classNotfound, typecast, ошибка синтаксического анализа и т.д. ANR также вызывает сбой приложения.

Примечание. Никогда не запускайте долго выполняющуюся задачу в потоке пользовательского интерфейса.

Ссылка ANR

Ответ 3

ANR означает Application Not Responding, что означает, что ваше приложение не регистрирует события в потоке пользовательского интерфейса больше, потому что там выполняется длительная работа

Ответ 4

ANR означает приложение, не отвечающее, и оно возникает, когда длительная операция происходит в основной теме......

Сбой вызваны исключением и ошибкой, например Nullpoint,

Ответ 5

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

Ответ 6

ANR также вызвано

  • В течение 5 секунд не реагирует на событие ввода (например, нажатия клавиш или события сенсорного экрана).
  • BroadcastReceiver не закончил выполнение в течение 10 секунд.

Ответ 7

Приложение не отвечает (ANR):

ANR будет отображаться в следующих условиях:

  • Ответ на входное событие (например, нажатие клавиши или экранное нажатие) в течение 5 секунд

  • Передатчик широковещательной передачи не завершил выполнение в течение 10 секунд.

Как избежать ANR?

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

Усиление ответной реакции: В приложении для Android обычно от 100 до 200 мс является пороговым значением, за которым пользователь будет чувствовать, что приложение работает медленно. Ниже приведены советы, по которым мы можем показать, что приложение более отзывчивое.

  • Показывать диалог выполнения, когда вы выполняете какую-либо фоновую работу, и пользователь ждет ответа.

  • Для игр специально выполняйте вычисления для ходов в рабочем потоке.

  • Покажите экран заставки, если ваше приложение имеет трудоемкую первоначальную настройку.

Краш: Авария является необработанным условием в приложении, и оно будет принудительно закрыть наше приложение. Некоторые из примеров сбоев похожи на исключение Nullpointer, исключение из-за незаконного состояния и т.д.

Ответ 8

ANR означает Приложение не отвечает.

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

Блокировка основного потока не приведет к сбою, но появится всплывающее окно, позволяющее пользователям убивать приложение через 5 секунд.

Но для Crash главная причина - человеческие ошибки. Большую часть времени, когда приложение вылетает из-за ошибки кодирования/дизайна, сделанной человеком

Ошибки человека

Отсутствие тестирования

Исключение Null Pointer

OutOfMemory

Пример:

Это обычное явление, когда программист ссылается на объект или переменную, которая не существует, в основном создавая ошибку с нулевым указателем.

Если у вас плохое соединение, это также может привести к сбою ваших приложений. Приложение может также иметь проблемы с управлением памятью.

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

Специфическое исключение Android

Ответ 9

Примеры 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;

Ответ 10

ANR для ex: если вы загружаете огромные данные в поток ui, другие другие возможности, такие как недостаточная память и т.д., это произойдет. Вероятно, это приводит к сбоям в android, мы не можем сказать, что оба они одинаковы для других

Ответ 11

[ANR и Crash Different] [1] Приложения для Android обычно запускаются полностью на одном потоке по умолчанию "поток пользовательского интерфейса" или "основная нить". Это означает, что все, что делает ваше приложение в потоке пользовательского интерфейса, которое занимает много времени, может вызвать диалог ANR, потому что ваше приложение не дает возможности обрабатывать входные события или намеренные трансляции.

Ответ 12

ANR: В основном из-за долгого выполнения основной темы.

При диагностировании ANR существуют некоторые общие шаблоны:

  • Приложение выполняет медленные операции с использованием ввода/вывода в основном потоке.
  • Приложение делает длинный расчет в основном потоке.
  • Основной поток выполняет синхронный вызов связующего на другой процесс, а другой процесс занимает много времени.
  • Основной поток заблокирован, ожидая синхронизированный блок для длительной операции, которая происходит в другом потоке.
  • Основной поток находится в тупике с другим потоком, либо в вашем процессе, либо через вызов связующего. Основной поток не просто ждет завершения длительной операции, но находится в тупиковой ситуации.

Следующие методы помогут вам выяснить, какая из этих причин вызывает ваши ANR.

CRASH:

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