Android의 Handler, Looper

|

Android의 Handler, Looper

기본적으로 싱글 스레드 모델로 작동하는 안드로이드 모델을 위해 다른 스레드에서 UI 스레드로 접근할 수 있는 통신 방법이다.

Looper

메인 스레드가 내부적으로 가지고 있고, Looper 안에는 Message Queue가 있다.
Looper는 메세지 큐에서 Message나 Runnable 객체를 차례로 꺼내서 Handler가 처리하도록 전달한다.
Handler는 Looper로부터 받은 Message를 실행하고 처리하거나 다른 스레드에서 받은 메세지를
메세지 큐에 넣는 역할을 한다.

Looper는 무한히 루프를 돌고 자신히 속한 스레드의 Message Queue의 Message/Runnable 객체를  
차례대로 Handler에 전달한다. 

메인 스레드가 아닌 경우엔 

Looper.prepare()
Looper.loop()

를 호출해야 한다.

Handler

스레드의 Message Queue에서 Message나 Runnable 객체를 받아 처리하여 스레드 간의 통신을 처리한다. 새로운 Handler는 객체가 생성된 스레드와 해당 스레드의 Message Queue에 바인드 된다.
다른 스레드에게 메시지를 전달하려면 특정 스레드에 속한 Handler의 post 또는 sendMessage 등의
메서드를 호출한다.

HandlerThread

Java의 스레드는 안드로이드에서 도입한 Looper를 가지고 있지 않기 때문에 Looper를 자동으로
보유한 클래스를 제공한다.

AsyncTask

태스크 스케쥴을 관리할 수 있는 콜백 메서드를 제공한다. 단점은 짧은 작업에서만 이상적으로 동작한다.
UI 관련된 독립된 작업을 실행할 경우 간단하게 구현할수 있다.