안드로이드의 이벤트 처리 메커니즘과 Handler 개념을 이해하기 위해 먼저 스윙의 쓰레드에 대해 이해할 필요가 있다.
기억하시라. 화면 갱신 작업은 하나의 쓰레드에서만 처리된다는 것을.
* 스윙의 이벤트 처리 쓰레드 관련 자료
* Single 쓰레드 UI 모델
- 모든 UI 관련 작업은 하나의 쓰레드에서만 처리되어야 함. 그렇지 않으면 비정상적인 결과가 생김.
=> 멀티쓰레드로 하면 안되는 이유 : http://weblogs.java.net/blog/kgh/archive/2004/10/multithreaded_t.html
- 그 하나의 쓰레드를 흔히 Event-Dispatch Thread(EDT)라고 부름.
=> 멀티쓰레드로 하면 안되는 이유 : http://weblogs.java.net/blog/kgh/archive/2004/10/multithreaded_t.html
- 그 하나의 쓰레드를 흔히 Event-Dispatch Thread(EDT)라고 부름.
- EDT는 UI의 무분별한 갱신을 막고 일관성있는 화면 갱신 메카니즘을 제공
- EDT에서의 GUI 이벤트를 처리하는 작업은 빨리 끝나야 하며, 그렇지 않으면 화면은 unresponsive 상태가 됨. 기억하시라. 화면 갱신 작업은 하나의 쓰레드에서만 처리된다는 것을.
- EDT는 사용자의 비동기적인 요구에 대응하기 위해 Event Queue를 유지하며
사용자의 요구는 이벤트 큐에 일단 저장되었다가 적절한 시점에 일괄적으로 처리됨.
사용자의 요구는 이벤트 큐에 일단 저장되었다가 적절한 시점에 일괄적으로 처리됨.
* 스윙의 주요 쓰레드
- Initial Thread : 초기 애플리케이션 실행. 여기서 UI를 만들지는 않음.
- Event-Dispatch Thread : GUI 이벤트 처리(리스너에 이벤트 전달해서 콜백메소드 실행) 및
스윙 컴포넌트 method(대부분 thread-safe하지 않음) 처리.
UI를 생성하고 UI와 상호작용하는 모든 코드는 EDT에서 실행됨.
스윙 컴포넌트 method(대부분 thread-safe하지 않음) 처리.
UI를 생성하고 UI와 상호작용하는 모든 코드는 EDT에서 실행됨.
- Worker Thread(Background Thread) : 시간이 소요되는 작업은 EDT에서 처리하지 말고,
백그라운드 쓰레드로 만들어서 처리후 결과만 UI에 반영
백그라운드 쓰레드로 만들어서 처리후 결과만 UI에 반영
* 스윙 주요 클래스
- SwingWorker : 백그라운드 작업을 처리하면서 EDT와 상호작용할 수 있게 해줌
- SwingUtilities.invokeLater(aRunnable) : EDT의 다른 작업이 다 끝난 후에 주어진 작업을 처리
'Android' 카테고리의 다른 글
[안드로이드] UI 쓰레드와 Handler (0) | 2010.03.17 |
---|---|
[안드로이드] Event 처리 메커니즘 (2) | 2010.03.17 |
이벤트 디스패치 쓰레드(Event Dispatch Thread) (0) | 2010.03.08 |
[안드로이드] 파일 위치에 따른 미디어 재생 샘플코드 (2) | 2010.03.08 |
[안드로이드] 이벤트 리스너 구현 유형 (0) | 2010.03.08 |