데브허브 | DEVHUB | [10분 테코톡] 제이의 UI 싱글 스레드 모델과 Handler·Looper[10분 테코톡] 제이의 UI 싱글 스레드 모델과 Handler·Looper
- 안드로이드 UI는 Thread Safe하지 않고 Context Switching 비용을 줄이기 위해 싱글 스레드 모델을 사용합니다. 🧵
- 메인 스레드 블로킹으로 인한 ANR을 방지하기 위해, 오래 걸리는 작업은 반드시 워커 스레드에서 수행해야 합니다. 🚫
- 스레드 간 안전한 통신은
runOnUiThread, 코루틴 Dispatcher, 또는 Handler/Looper/Message 직접 구현을 통해 가능합니다. 🤝
- Looper는 스레드에 메시지 루프를 연결하여 스레드가 작업을 기다리며 유지되게 하며, 워커 스레드에서는 명시적 준비와 종료가 필요합니다. 🌀
- Message Queue는 Looper 내부에 존재하며 스레드의 할 일을 메시지 형태로 저장하고, 순서 조절이 가능합니다. 📦
- Handler는 메시지를 Message Queue에 넣고(post/sendMessage) 꺼내서 실행하며(handleMessage/run), 메시지 종류에 따라 적절한 함수를 호출합니다. 📨
- 메시지 처리 시
dispatchMessage 함수가 Runnable 타입과 데이터 타입 메시지를 구분하여 run() 또는 handleMessage()를 호출합니다. 🚦
- Handler/Looper 직접 구현은 복잡할 수 있으며,
LiveData.postValue()나 코루틴을 활용하면 비동기 작업 및 UI 업데이트를 더 간결하게 처리할 수 있습니다. 💡
- 코루틴은 스레드 관리를 추상화하여 개발자가 효율적이고 행복하게 코딩할 수 있도록 돕는 현대적인 대안입니다. 🚀