* Thread, Looper And Handler
> Thread 는 하나의 Looper, 하나의 Msg Queue 를 가진다
Thread() {
void run() {
Looper.prepare(); // Msg Queue 를 생성하고, Looper 를 이용해 Thread 와 Msg Queue 를 연결
// Handler 정의
Looper.loop(); //Looper 가 Msg Queue 에서 Msg 를 전달받아 Handler 로 던지는 작업을 반복한다
> run() 이 완료되지 않도록 하는 차단적 Method
}
}
> Looper.quit(); // run() 가 종료될 수 있도록 Looper.loop() 를 해제하여,
msg Queue 에서 Msg 를 전달받아 던지는 작업을 중단하도록 한다
> Queue 안에모든 Msg 를 폐기 (아래 그림의 1~3번 Msg)
> Looper.quitSafely(); // 전달 경계를넘지 않은 Msg 만 폐기 (2~3번 Msg)
> 1개의 Thread 는 여러 Handler 를 가질 수 있다
> new Handler(); // 명시적으로 Looper를 선언하지 않는 경우, 해당코드를 실행시키는 Thread 의 Looper 에 Binding 된다
* Android Thread 의 종류
1) UI (Main) Thread - Platform 내부의 Activity thread 에 의해 관리됨
2) Binder Thread
3) Worker Thread
* Thread Lifecycle
> Thread.interrupt() 을 호출하면, 단지 flag 만 set 하기 때문에 바로 중지시키려면 run() 내에, isInterrupted() 확인 후에 종료 시키도록 구현 해야한다
* Handler Thread
> Looper 등의 설정을 자동으로 해준다
> Single Thread 와 순차적인 Task 실행자를 제공
* Executor
> Task 의 실행과 생성을 분리해준다
> Executors.newSingleExecutor();
Executors.newFixedThreadPool(1);
- 모두 1개의 worker Thread 를 가지나, 후자는 executor.setCorePoolSize(4) 를 통해 개수를 변경할 수 있다
* Thread Pool
> Task Queue 와 Worker Thread 의 집합
'SW > Android' 카테고리의 다른 글
//View (0) | 2020.06.20 |
---|---|
//RecyclerView (0) | 2020.05.23 |
AsyncQueryHandler 와 Loader (0) | 2019.09.08 |
Asynchronization Task (0) | 2019.09.08 |
IPC (Inter Process Communication) (0) | 2019.09.07 |