[Android] ANR 이란?

2014. 12. 27. 17:25Basic/etc

반응형


ANR 이 뭔가요?


ANR (Application Not Responding) 은 어플리케이션이 응답하지 않는다는 에러입니다.

어떤 상황에 발생할까요? 

   1. 응용 프로그램이 5초 이상 사용자의 입력에 반응하지 않을 때
   2. 브로드캐스트 리시버(BR)가 10초 내로 리턴하지 않을 때

 
  
위 두가지 경우에 대해 OS가 관여하여 ANR 대화상자를 띄우며 이 대화상자를 통해 프로그램 강제종료가 가능합니다.

어떻게 ANR을 피할 수 있나요?

 
Main thread에서 실행되는 임의의 method는 최소한의 일을 해야 합니다.
특히 onCreate(), onResume() 과 같은 핵심 생명주기 method에서 가능한 적은 일 수행하는 것이 좋습니다.
네트워크나 데이터베이스 operation 같은 잠재적으로 길게 실행될 가능성이 있는 작업들이나, 비트맵 크기를 조정하는 것 같은 계산상 값비싼 연산은 쓰레드를 새로 생성해서 처리하는 것이 좋습니다. 물론 쓰레드에서 처리가 완료되었을 때 결과값을 받도록 handler를 설치 및 전달하는 것도 중요하지요.

BR이 오랜 작업을 수행해야 하는 경우라면, service를 만드는 것이 좋습니다.
BR이 activity를 띄워야 한다면, notification manager를 사용해서 사용자에게 보여주는 것으로 변경해야 합니다.


ANR 피하는 것을 넘어 응답성을 강화하는 방법에 대해서.

  
 일반적으로 100ms ~ 200ms 가 사용자가 지연을 느낄 수 없는 Threadhold 라고 합니다. 즉 모든 작업은 200ms 이상 걸리면 안 좋다는 거죠. User 가 "버벅거린다" 를 느낀다는 말입니다. 사용자 입력에 응답하여 백그라운드에서 일을 한다면, 진행이 되고 있음을 보여주는 것이 좋습니다.  ( ProgressBar와 ProgressDialog 등으로 ) 그렇지 않다면 User는 프로그램이 stuck 되었다고 느끼기 쉽죠. 특히 게임에서는 추가 쓰레드에서 움직임에 대한 계산을 하는 것이 좋습니다. 게임에서의 계산은 보통 항상 반복적으로 일어나며, 오래 걸리는 계산일 확률이 높죠. 시간이 걸리는 초기 셋업단계라면 착수화면 ( Intro Screen or Splash Screen )을 보여주거나, 가능한 한 빨리 메인 뷰를 렌더링하고 비동기적으로 정보를 채워넣는 것을 고려하는 것이 좋겠습니다.


출처 : http://aroundck.tistory.com/223


반응형

'Basic > etc' 카테고리의 다른 글

[Android] Content Provider  (0) 2014.12.27
[Android] 무결성을 위한 앱 설계시 고려할 사항들  (0) 2014.12.27
[Android] Service 사용법  (0) 2014.12.27
클래스와 객체  (0) 2014.11.10
final, static  (0) 2014.11.10