← 질문 목록
#244깊이 0

안드로이드 메인 스레드에서 무거운 작업을 하면 왜 ANR이 발생하는가?

모바일기초동시성

메인 스레드가 일정 시간 동안 이벤트 루프를 돌지 못해 사용자 입력에 응답하지 않기 때문이다.

순서메인 스레드입력 큐
1입력을 처리한다비어 있다
2DB 조회를 시작한다탭 하나가 쌓인다
3아직 조회 중이다탭 셋이 쌓인다
4아직 조회 중이다시스템이 ANR 창을 띄운다

안드로이드는 UI 갱신과 사용자 입력 처리를 메인 스레드 하나에서 전담한다. 여기서 네트워크 요청이나 DB 조회 같은 무거운 작업이 수행되면 큐에 쌓인 다음 이벤트들을 처리하지 못한다.

입력을 5초쯤 처리하지 못하면 ANR로 본다. 브로드캐스트나 서비스는 기준 시간이 따로 있다. 이때 메인 스레드는 여전히 작업 중이지만, 더 이상 사용자 인터랙션이 불가능한 상태가 된다.

결국 ANR을 막으려면 메인 스레드에서는 UI 갱신만 수행하고, 시간이 오래 걸리는 작업은 Worker 스레드나 Coroutine으로 분리해야 한다.

추천 꼬리질문

0/300

적은 내용은 AI 학습에 쓰일 수 있습니다. 이름이나 연락처는 넣지 말아 주세요.

관련 질문

안드로이드 메인 스레드에서 무거운 작업을 하면 왜 ANR이 발생하는가?