← 질문 목록
#91깊이 0
비동기로 옮겼는데도 왜 응답 없음이 생기는가?
작업을 다른 스레드로 보냈어도 메인 스레드가 결과나 잠금을 기다리면 막히기 때문이다. 느린 Binder 호출과 과도한 그리기도 입력 처리를 지연시킨다.
사용자→메인 Looper
입력 이벤트를 보낸다
메인 Looper→작업
결과나 잠금을 기다린다
시스템→앱
기한 내 응답이 없어 ANR을 기록한다
메인 스레드는 입력과 생명주기 콜백과 화면 갱신을 직렬로 처리한다. 입력 이벤트에 약 5초간 응답하지 못하면 입력 디스패치 ANR이 날 수 있다.
스택 덤프에서 main의 대기 지점을 찾고 잠금 보유 스레드도 따라간다. StrictMode와 Perfetto로 I/O와 느린 Binder 호출을 확인한다.
추천 꼬리질문
관련 질문
- 동기/비동기 및 블로킹/논블로킹의 차이는 무엇인가?운영체제비동기 처리의 근본적인 개념인 동기/비동기 및 블로킹/논블로킹의 차이를 알아야 비동기 전환 후의 응답 없음 현상을 분석할 수 있다.
- 안드로이드 메인 스레드에서 무거운 작업을 하면 왜 ANR이 발생하는가?모바일비동기로 옮겼음에도 발생하는 응답 없음 현상은 안드로이드 메인 스레드에서 발생하는 ANR(Application Not Responding)의 구체적인 사례이다.
- 푸시 알림이 안 오는 이유는 대개 무엇인가?모바일
- 죽은 서버로 요청이 안 가는 이유는?네트워크
- 싱글 스레드인 JS에서 비동기 작업이 멈추지 않고 도는 이유는 무엇인가?언어 · 런타임