본문 바로가기

STUDY/Android

Android ANR (Application Not Responding) 이란 무엇인가?

ANR (Application Not Responding) 이란 무엇인가?

그림 1. ANR dialog 입니다.

안드로이드에서 시스템은 일정 기간 충분한 속도로 응답하지 않는 애플리케이션이 있으면, 그림 1과 같이 앱의 응답이 멈추었음을 사용자에게 알려줍니다. 아마 안드로이드 기기를 사용해보신 분이라면 자주 마주하셨던 상황일 겁니다. 좋은 앱이라면 ANR이 발생하지 않도록 앱을 만들어야 겠죠?? 

 

앱이 잠재적으로 오랜 시간 작업을 수행하는 상황에서는 UI 스레드에서 작업을 수행하는 대신 작업자 스레드를 만들고 거기에서 대부분의 작업을 수행해야 합니다. 이렇게 하면 사용자 인터페이스 이벤트 루프를 구동하는 UI 스레드가 계속 실행되므로 시스템에서는 코드가 멈추었다는 결론을 내리지 못하게 됩니다. 이러한 스레딩은 대개 클래스 레벨에서 수행되기 때문에 응답성을 클래스 문제로 생각할 수 있습니다. (이것을 메서드 레벨 문제인 기본 코드 성능과 비교해 보세요.)

Android에서는 Activity Manager 및 Window Manager 시스템 서비스에서 애플리케이션 응답성을 모니터링합니다. Android는 다음 조건 중 하나를 감지하면 애플리케이션에 대해 ANR 대화상자를 표시합니다.

  • 입력 이벤트(예: 키 누름 또는 화면 터치 이벤트)에 대한 응답을 5초 내에 하지 않음

  • BroadcastReceiver가 10초 내에 실행을 완료하지 못함