Handler와 Looper 그리고 Message

    안드로이드에서는 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);



    댓글