Что такое ANR

«Что такое ANR» — вопрос из категории Android компоненты, который задают на 27% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

ANR (Application Not Responding) — ошибка, возникающая, когда UI-поток блокируется дольше 5 секунд (для BroadcastReceiver — 10 секунд). Это приводит к диалогу "Приложение не отвечает".

Причины:

  • Долгие операции в UI-потоке (сеть, БД, тяжелые вычисления).
  • Взаимоблокировки (deadlocks).
  • Проблемы с IPC (межпроцессным взаимодействием).

Как избежать:

  • Выносить тяжелые задачи в Coroutine, RxJava, AsyncTask (deprecated).
  • Использовать StrictMode для детектирования проблем.
// Плохо (вызов в UI-потоке)
Thread.sleep(6000) // ANR!  

// Хорошо (вызов в фоне)
lifecycleScope.launch(Dispatchers.IO) {  
    heavyWork()  
}