Android는 메인(UI) 스레드를 중심으로 한 엄격한 스레딩 모델을 가집니다 — 이 스레드는 UI를 처리하고 반응성을 유지해야 합니다. 스레딩, 작업이 메인 스레드 밖으로 옮겨져야 하는 이유, 도구(coroutine, 그리고 역사적으로 스레드/handler)를 이해하는 것이 반응성 있는 앱에 중요합니다.
메인 스레드 규칙
Android에는 다음을 하는 단일 메인(UI) 스레드가 있음:
→ 모든 UI 작업 (그리기, 이벤트) 처리 — UI 업데이트는 반드시 그 위에서
→ 반응성을 유지해야 함 — 차단하면 UI가 멈춤; 5초 이상 차단 = ANR (App Not Responding)
두 가지 핵심 규칙:
1. 메인 스레드에서 길거나 차단하는 작업을 하지 말 것 (네트워크, DB, 무거운 계산) → 밖으로 옮김
2. 백그라운드 스레드에서 UI를 업데이트하지 말 것 → UI를 위해 메인 스레드로 다시 전환
메인 스레드 밖으로 작업 옮기기
viewModelScope.launch {
= withContext(Dispatchers.IO) {
repository.fetchData()
}
updateUi()
}
