안드로이드에서는 Main Thread 외에 UI Thread를 컨트롤 할 수 없다.
따라서 Sub Thread는 Main Thread와의 통신으로 UI Thread를 컨트롤 가능 하다.
이러한 통신 방식이 Handler이다.
Handler에 대해서는 아래 링크에서 자세히 알 수 있다.
http://blog.naver.com/PostView.nhn?blogId=huewu&logNo=110115454542
핸들러에 메시지가 도착하게 되면
public void handleMessage(Message msg)가 호출 된다.
int what : ID
int arg 1 : 메시지가 보내는 정보 1
int arg 2 : 메시지가 보내는 정보 2
Object obj : Integer로 표현 불가능 할 경우 객체를 보냄
Messenger replyTo : 응답받을 객체 지정
boolean Handler.sendEmptyMessage(int what) : ID 전달
boolean Handler.sendMessage(Message msg): 정보 전달
boolean sendMessageAtFrontOfQueue(Message msg) : 순서 상관 없이 Q에서 가장 앞에
boolean post(Runnable r) : Runnable 객체를 보내면 객체의 run 메소드가 실행됨
만약 이너 클래스가 아닌 분리된 클래스의 경우 공유가 불가능 함으로 메세지를 적어 보내야함 (공유를 안함)
메세지 풀
- 매벌 핸들러 구현할 때마다 new를 사용한다면 메모리 생성과 가비지 컬렉션의 작업도 생김 - 속도가 느려짐
- 임시 캐쉬를 사용하여 빠른 작업이 가능
static Message obtain(Message orig)
static Message obtain(Handler h, int what, int arg1, int arg2, Object obj)
void recycle()
Message msg = Message.obtain(mHandler, 0, mBackValue, 0);
mHandler.sendMessage(msg);
댓글