// todo 코드와 이미지 추가하기
MessageQueue
- 메세지는 스레드 간의 신호
- 메세지를 쌓아두는 공간
Looper
- MessageQueue에서 Message를 꺼내서 핸들러로 전달하는 작업 수행
- 하나의 스레드는 오직 하나의 Looper만 가질 수 있음
- Looper는 MessageQueue가 비어있는 동안은 아무 행동도 하지 않고,
메세지가 들어오면 해당 메세지를 꺼내 적절한 Handler로 전달 - Looper.prepare()를 통해 messageQueue를 준비
- Looper.loop()를 호출함으로써 Message를 기다리는 작업이 시작 됨
- Activity에서 onDestroy() 콜백 호출 시 handler.getLooper().quit()을 이용해 꼭 종료시켜줘야 함
Handler
- 기본 생성자를 통해 Handler를 생성하면, 생성되는 Handler는 해당 Handler를 호출한 스레드의 MessageQueue와 Looper에 자동 연결
- 생성자의 파라미터에 특정 Thread의 Looper를 넘겨 Looper와 연결할 수 있음
- 메세지가 도착하면 handleMessage(Message msg) 메서드가 호출됨
- 메세지 전송 시에는 sendEmptyMessage(int what)/sendMessage(Message msg), sendMessageAtFrontOfQueue(Message msg) 의 메서드를 이용
- post(Runnable)를 통해 객체를 보낼 수도 있음, Runnable 객체를 보내면 해당 객체의 run 메서드가 실행됨
HandlerThread
- Looper를 가진 Thread
- Looper는 Handler를 생성할 수 있음
- Thread처럼 Thread.start()는 여전히 호출해주어야 함