728x90

ANR이란 Application Not Responding의 약자로, '애플리케이션이 응답하지 않는다'는 뜻이다. 

 

ANR 발생 요인 

  • 애플리케이션이 UI 스레드에 어떠한 I/O 명령(빈번한 네트워크 액세스)으로 인해 막힐 때
  • 너무 많은 시간을 정교한 메모리 구조를 구축하는데 들일 때
  • Input 이벤트(키를 누르거나 화면을 터치하는 등)에 5초안에 반응을 하지 않을 때
  • BroadcatReceiver 가 10초내로 실행을 끝내지 않을 때 (UI가 없는 브로드캐스트 리시버, 서비스도 실행 주체가 메인스레드이므로 긴 시간을 소모하는 작업인 경우 ANR을 발생시킨다.)

 

ANR 발생 방지 

  • ANR의 발생을 예방하려면 소요 시간이 긴 작업을 최소화해야 한다. 
  • UI업데이트를 제외한 나머지 작업은 메인 스레드에서 작업하지 않는다.
    • 연산, 네트워크 통신, DB와 관련된 작업 등은 굳이 사용자에게 시각적으로 보여주지 않고 해당 작업의 결과만 알려주면 되기 때문 
    • 작업이 수행되고 있음을 사용자가 알 수 있도록 프로그래스바 등으로 표현해 주는 것이 좋음  

특정 기능을 수행하는 버튼을 눌렀을 때 기능이 수행되고 있음에도 시각적으로 알 수가 없다면, 사용자가 기능을 반복해서 실행시킬 수 있어서 결과적으로 작업 과부하로 인해 ANR이 발생하거나, 사용자가 문제가 있다고 생각할 수 있고 앱 자체를 꺼버릴 수 있음 

 

결론

메인 UI 스레드가 오래 기다리지 않게 한다.
복잡한 작업이 있다면 백그라운드에서 진행한다.

 

 

참고

https://itmining.tistory.com/3

 

[안드로이드] ANR의 의미와 예방

이 글은 PC 버전 TISTORY에 최적화 되어있습니다. 서론 안드로이드 앱을 구현하여 돌리다보면, 또는 플레이스토어에 올라온 앱임에도 불구하고, 앱의 중지를 알리는 메시지를 심심치 않게 봤을 것

itmining.tistory.com

 

+ Recent posts