ANR이란?

장재용·2024년 5월 5일

ANR?

Activity Not Response 의 약어로 에러상황을 지칭

발생 조건

유저 이벤트에 액티비티가 5초 이내에 반응하지 못하는 경우 발생

원인

안드로이드는 하나의 쓰레드에서 업무가 처리되는데 그것을 메인 쓰레드라고 한다.
하나의 스레드에서 작업이 되다보니 실행시간이 오래걸리는 업무가 발생하면, 이 작업이 미처 끝나기 전에, 유저가 이벤트를 발생시키면 제 시간에 이벤트 처리가 안되게되고, 최종적으로 5초가 경과되면 ANR이 발생하게 된다.

다만, 오해하면 안되는게 시간이 오래 걸리는 업무가 있다고 해서 에러가 발생하는건 아니다.
아무리 시간이 오래 걸려도 유저가 화면을 터치(이벤트 발생)하지 않는다면 에러가 발생하지 않는다.

요지는 시간이 오래걸리는 작업을 하는 도중, 유저 이벤트가 발생하게 된다면, 이벤트 처리를 5초 안에 처리되지 않으면 ANR이 발생한다는게 핵심이다.

해결 방법

  • Thread, Handler
  • Coroutine

결론

그럼 5초동안 ANR이 발생하는 상황은 주로 어떨때인가? 대부분이 네트워크 통신을 할 경우이다.
내가 테스트할 때는, 네트워크 환경이 쾌적해서발생안할 수도 있겠지만, 사용자가 엘리베이터를 사용중이거나 기타 통신의 혜택을 미처 받지 못한 구역에 있으면 고스란히 노출되는게 ANR 이다.

앱 개발은 네트워크 환경이 모바일 네트워크이다.
즉, 언제 어디서든 끊어질 수 있는 환경이라는 뜻이다.
따라서 앱 개발자는 네트워크 통신시 항상 ANR에 대처해서 코드를 짜는걸 명심 해야한다.

profile
enjoy_error_message!

0개의 댓글