Android/Theory

Handler

병홍 2013. 4. 17. 21:07

Handler

 

Message나 Runnable Object를 전달하는 역할

Message

handleMessage() 메소드 호출

Runnable Object

run() 메소드 호출

 

Message는 특정 Thread에 있는 MessageQueue에 쌓이고 나옴

Looper는 MessageQueue에 있는 Message를 꺼내 Handler에게 전달

Handler는 handleMessage를 통해 메세지 처리

 

Handler는 입구(외부 Thread인 MessageQueue)와 출구(UI Thread인 HandleMessage)를 가짐

 

기본 생성자 Handler handler = new Handler();를 생성하면

자동으로 new Handler()가 호출된 Thread의 MessageQueue와 Looper에 연결됨

 

하나의 Thread에는 하나의 Looper와 MessageQueue만 가질 수 있음

따라서 handler에서 여러 요구 사항이 오거나 특정 요구 사항의 내용이 많다면 ANR이 발생 가능(UI Thread 일 때)

 

UI Thread가 아닌 다른 Thread 내부에서 사용될 때에는 MessageQueue와 Looper 생성이 필요함

HandlerThread h = new HandlerThread("lim");

h.start();

Handler hander = new Handler(t.getLooper());

t.quit();

 

HandlerThread는 MessageQueue와 Looper를 기본적으로 가짐.

(Looper.prepare(); Looper.loop())