* 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

+ Recent posts