Thread에서 사용하는 Looper와 Handler는 무슨 역할 을 할까???
우선 말로만 보면 Looper 같은 경우는 먼가 반복적으로 진행할 것 같은 느낌이들고,
Handler는 먼가 조정 한다(?) 라는 느낌이 든다.
그래서 전 처음 이렇게 생각 했습니다.
Looper는 먼가 SubThread에서 무한 반복으로 작업을 할려고 할때 사용하는 게 아닐까???
완전.... 생각 하지 말아야할 어이 없는 내용이었죠.
Looper와 Handler는 그런 역할 이 아닙니다.
Thread간 Message를 전달하기 위한 것입니다.
Looper 라는 놈은 Thread에 Message Queue를 생성 해주어, Thread에 존재하는 Handler에 Mesaage들을 저장 시켜 놓고, Message Queue에 하나씩 빼서 Handler를 실행하게 하는 역할 입니다.
Looper.prepare() 함수는 Message Queue를 Setting 해주는 역할 을 하며 Looper.loop()는 Message Queue에서 Message를 전달해주는 역할을 합니다.
이 Message Queueu는 Thread 별로 생성이 되며, 따라서 Looper.prepare 과 Looper.loop 함수는 Thread에 run 함수에서 정의를 해야합니다.
[Android 샘플 소스]
class LooperThread extends Thread {
public Handler mHandler;
public void run() {
Looper.prepare();
mHandler = new Handler() {
public void handleMessage(Message msg) {
// process incoming messages here
}
};
Looper.loop();
}
}
Looper와 handler는 Thread간 Message 전달이지
이걸 이용하여 무한 반복이나 별도 작업을 진행 해야지~ 라는 생각은 버리시길 바랍니다.
한 Thread에서 무한 반복중에 있을 때 Looper와 Handler를 통하여
그 Thread를 정지 시키는 용도 같은 걸로 사용하시면 되겠네요~
혹시, 제가 공부하다가 위 형태에서 Looper.loop 함수를 주석 처리 하면 당연
Message Queue에서 Message를 꺼내는 역할을 하지 않으니 Handler가 작동을 하지 않아야 하는 거 아닌가요??? 이 생각에 대해 어떻게 생각하세요??
의견 있으신분~ 댓글 부탁드립니다~
그럼 오늘도 즐코딩~ ㅎ
'나의 플랫폼 > 안드로이드' 카테고리의 다른 글
[Android] Dialog 중복 방지 (4) | 2013.07.12 |
---|---|
[Android] GPS 위치 추적 속도 구하기! (3) | 2013.07.10 |
[Android] InputFilter (0) | 2013.07.08 |
notification (0) | 2013.07.04 |
[Android] 외장 하드 접근의 큰 착각. (11) | 2013.07.03 |