android 공식문서 정리 및 번역 글..
Android 앱의 UI스레드가 오랫동안 차단되면 ANR(어플리케이션 응답 없음)
오류가 트리거된다. ANR은 UI 업데이트를 담당하는 앱의 기본 스레드가 사용자의 입력 이벤트를 처리하지 못해 불만을 초래한다. 따라서 앱에 응답성을 설계하여 시스템이 사용자에게 ANR 대화상자를 표시하지 않도록 하는 것이 중요하다.
앱이 다른 작업을 수행하느라 입력 이벤트나 인텐트 브로드캐스트를 처리할 기회를 제공하지 않게 된다.
BroadcastReceiver
에 5초 이내로 응답하지 않는 경우12시 00분 5초
에 A이벤트 발생, 12시 00분 8초
에 B이벤트가 발생했고 아무 응답이 없다면, 12시 00분 10초
가 아닌 12시 00분 13초
에 ANR이 발생한다!BroadcastReceiver
가 10초 내에 실행을 완료하지 못한 경우UI 스레드
에서 실행되는 메서드는 가능한 한 작업을 적게 실행해야 한다.onCreate()
나 onResume()
과 같은 주요 생명주기 메서드에서 처리하는 작업을 가능한 줄여야 한다. Worker thread
에서 실행해야 한다. (db작업은 비동기식 요청으로)일반적으로 100-200ms
은 사용자가 앱의 속도 저하를 감지하는 임계값이다. 따라서 ANR을 피하고 앱이 적절한 속도로 사용자에게 응답하도록 하기 위해 추가적으로 할 작업은 다음과 같다.
ProgressBar
)Splash
화면을 표기하거나, 기본 화면을 가능한 빨리 렌더링하고 로딩중임을 나타내며 비동기로 화면을 채운다.