간단하게 Program, Process, Thread에 대해서 말하자면,
Program : 명령과 데이터로 구성된 코드의 집합
Process : 현재 메모리에 올라가 있는 프로그램
Thread : Process내의 독립된 작업의 흐름
이라고 볼 수 있다.
Android에서 Looper와 Handler는 가장 메인이 되는 Low-level의 기능을 한다.
Looper는 문서에 따르면 Thread의 메세지 루프를 실행하기 위한 객체임.
(나는 Loop와 Looper를 구분하지 않고 생각했었는데, Loop를 돌리기 위해 Looper객체가 필요하다고 생각해야 이해가 된다)
사용자들의 입력을 받고 동작을 하기위해서는 Loop가 돌아야하는데 Loop가 지속적으로 Message Queue에 Message의 입력을 기다리면 낭비가 심하고 Block이 되므로, 시스템의 입력은 Loop를 실행하기 위한 Looper을 통해서 실행 되도록 한다.
Handler는 Message나 Runnable객체를 보내거나 시행시키는 객체임.
일련의 동작은 다음과 같이 이루어진다.
1. Looper와 Handler 생성
2. Message가 Handler에게 보내짐
3. Handler는 해당 Mesaage를 Message Queue에 보냄
4. Looper가 Message Queue의 Message를 진행함 (Loop 실행)
5. Message가 실행 될 수 있을 때, Looper는 Handler에게 Message를 보내고, Handler는 이를 실행한다.
왜 하나의 UI Thread에서만 View그리게 하는가?
여러 Thread에서 UI에 관여하게 되면, Thread의 속도와 처리 순서에 따라서 View가 일관적이지 못하게 나타나기 때문에 하나의 Thread에서 관리하게 한다.
충분하지는 않지만 Thread의 동작이 어떻게 이루어 지는가 알 수 있다.(아래의 참조들 참고바람)
근데 UI Thread는 Application실행과 동시에 시작되고, Android Framework에 의해서 자동으로 Loop가 작동하는데 왜 이러한 내용을 알아야 할까?
(물론 Coroutine를 통해서 손쉽게 쓰레딩을 할 수있는 방법 등에 의해서 직접적으로 사용하는 거의 없다. 나의 경험에는....)
그건 UI Thread를 Block하는 작업들이 존재하기 때문이다. 이러한 작업들은 리소스를 잡아먹는 작업이 될 수 있고 또는 서버와의 통신 등을 통해서 시간이 걸리는 작업이 될 수도 있다. 이러한 작업들이 UI Thread를 Block하는 경우에는 문제가 생길 수 있으므로, 이러한 작업들을 다른 작업 Thread를 통해서 작동하도록 하는것이다.
즉 Main Thread를 NonBlock하는 방법으로 프로그래밍을 하기위해서 동시성 프로그래밍을 작성한다.
그리고 Handler의 SendMessage는 쓰레드 간의 통신이 가능하기 때문에, 이를 이용하여 결과를 필요로 하는 Thread에서 받을 수 있다.
Thread 사용은
새로운 Thread를 생성하여 이 Thread내부를 구현하여 실행시키는 방법과
Runnable객체의 전달을 통해 작업을 실행하는 방법이 있다.
간단히 설명하자면, Runnable은 직관적으로 실행 할 수 있는 Task를 작성하여, Excutor나 Thread를 통해서 실행시키는 것을 말하고 Thread생성도 말 그대로 새로운 Thread객체를 만드는 것을 의미한다.
참조
https://proandroiddev.com/decoding-handler-and-looper-in-android-d4f3f2449513
Decoding Handler and Looper in Android
What is Handler and Looper, why we need them and how one can use them (with examples)
proandroiddev.com
https://recipes4dev.tistory.com/143?category=768056
안드로이드 스레드(Android Thread)
1. 스레드(Thread), 그리고 프로그램(Program)과 프로세스(Process). 스레드(Thread)를 설명하는 이 문장을 읽고 나서, 어떤 용어 또는 개념들이 머리 속에서 확장되나요? 스레드(Thread)라는 단어를 듣는 것
recipes4dev.tistory.com
'안드로이드 읽어보기 > 면접준비' 카테고리의 다른 글
Android Architecture, GC (0) | 2022.07.06 |
---|---|
5. MVVM, MVC, MVP + (MVI) (0) | 2022.06.27 |
4. 힐트 (0) | 2022.06.27 |
3. 코루틴 (0) | 2022.06.26 |
2.안드로이드 동시성 처리 (0) | 2022.06.25 |