[안드로이드] Handler 란

안드로이드에서 UI 작업은 메인 스레드에서 해야한다. 로직상 워커 스레드 내에서 UI처리를 해야한다면,

해당 워커 스레드와 메인 스레드를 이어주는 핸들러를 이용한다.

워커 스레드에서 핸들러는 메인 스레드로 메시지를 전달하고, 메시지를 수신한 메인스레드에서 적절한 작업을 처리하는 것이다.

※ UI 반응성을 위해 메인 스레드에서는 무거운 작업을 해서는 안된다. 그렇기 때문에 워커 스레드를 이용하는 것이다.

## Massage queue, Looper

메세지 큐는 핸들러가 전달하는 메세지를 보관하는 FIFO방식의 큐이다. 메세지 또는 Runnable이 저장되며 메세지 큐에 저장된 것들을

Looper가 차례로 꺼내서 핸들러로 전달한다. 이때 핸들러가 메세지 큐에 넣은 것을 다시 핸들러로 전달하는 이유는 message나 runnable

을 처리하기 위해서이다.

## 시나리오

예를 들어 메인 스레드와 워커 스레드가 하나씩 있다고 하자.

  1. 워커 스레드가 UI처리를 위해 메인 스레드에서 생성된 핸들러 의 sendMessage() 메서드로 메시지를 전달한다.

  2. 해당 메세지는 메인스레드의 Message Queue에 저장된다.

  3. Looper가 차례대로 메시지를 꺼내 Handler의 HandleMessage() 로 전달된다.

  4. HandleMessage()가 실제 UI 작업을 수행한다.

이때 Handler는 메인 스레드의 객체이기 때문에 문제없이 UI처리가 가능하다. (워커 스레드에서는 핸들러를 만들면 안된다는 소리다.)