- Today
- Total
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 재능이의 돈버는 일기
- StresslessLife
- K_JIN2SM
- 소소한 일상
- My Life Style & Memory a Box
- Blog's generation
- 공감 스토리
- 취객의 프로그래밍 연구실
- Love Me
- Dream Archive
- 세상에 발자취를 남기다 by kongmingu
- hanglesoul
- 카마의 IT 초행길
- 느리게.
- 미친듯이 즐겨보자..
- Joo studio
- Gonna be insane
- 악 다 날아갔어!! 갇대밋! 왓더...
- xopowo05
- 맑은공기희망운동
- 엔지니어 독립운동
- 혁준 블로그
- Simple in Complex with Simple
- 무의식이 의식을 지배한다
드럼치는 프로그래머
[안드로이드] 메시지 처리 Looper 본문
[First written by Steve Guo, please keep the mark if forwarding.]
Steve Guo 의 자료를 번역함과 동시에 개인적으로 스터디 한 내용을 추가하였습니다.
안드로이드 Thread는 자신과 결합된 메시지큐 가 없으므로 Looper 와 통신할 수 있는 핸들러를 가지고 있어야 한다.
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();
}
}
프로세스가 자바 Application을 위해 생성되었다면 main thread는 top-level application오브젝트 ( activity, intent receiver,..)나 생성한 윈도우등을 관리하는 메시지큐를 처리하는 역할을하기때문에 main thread를 위해서는 Looper 개체가 필요없다.
하나의 Dalvik VM의 시작점은 아래와 같다.
public static final void main(String[] args) {
Looper.prepareMainLooper();
ActivityThread thread = new ActivityThread();
thread.attach(false);
Looper.loop();
if (Process.supportsProcesses()) {
throw new RuntimeException("Main thread loop unexpectedly exited");
}
thread.detach();
}
Handler.java 는 메시지 송신및 메시지와 쓰레드의 메시지큐와 연결된 Runnable 개체를 처리한다.
각 핸들러 인스턴스는 하나의 싱글 쓰레드와 연관되어 있다. 새로운 핸들러를 생성하면 그것을 생성한 쓰레드와 바운딩되어 그 쓰레드의 메시지큐로 오는 메시지와 Runnables을 전달하게 되고 메시지큐로부터 꺼내어 실행하게 된다.
핸들러의 메지시 API를 스케줄링 하는 부분은 2부분 (Send / Post) 으로 나눌 수 있다. send 버전은핸들러의 handleMessage() 에 의해 처리되는 데이터를 담고있는 메시지 개체를 큐에 넣는다. Post 버전은 메시지가수신될 때 메시지 큐에 의해 호출되는 Runnable 개체를 큐에 넣도록 해준다.
// Example 2:
class MyActivity extends Activity {
Handler mHandler = new Handler();
public void XXX() {
// post a runnable object to run on main message queue
mHandler.post(new Runnable() {
public void run() {
// now it’s run on the thread corresponding to mHandler.
}
});
}
}
아래로 부터 번역및 수정하였습니다.
출처: http://letsgoustc.spaces.live.com/blog/cns%2189AD27DFB5E249BA%21514.entry
[출처] 안드로이드 메시지 처리 (SW 마천루) |작성자 vicfaith
'★─Programing > ☆─Android' 카테고리의 다른 글
[안드로이드] 상단 안테나 및 시계 창 삭제 (0) | 2011.06.03 |
---|---|
[안드로이드] 제12강좌 - Thread 추가 (0) | 2011.06.01 |
[안드로이드] Context Menu 를 사용하는 예 (0) | 2011.05.31 |
[안드로이드] 제11강좌 - OptionMenu & SubMenu 와 ContextMenu 만들기 (0) | 2011.05.31 |
[안드로이드] 제10강좌 - 기억력게임만들기 (4) | 2011.05.30 |