안드로이드는 '메인 스레드와 백그라운드 스레드의 통신', '스레드 및 스레드 간 통신'을 위해 핸들러와 루퍼를 제공한다.
핸들러와 루퍼는 스레드와 스레드 간의 통신을 위해 사용 !!
Handler and Looper 작동 원리
![](https://velog.velcdn.com/images/kangyuri1114/post/e4a17d99-34d2-4533-a06f-abfeadcd4cc7/image.png)
- Main Thread는 내부적으로 Looper를 가진다.
- Looper는 Message Queue를 포함한다.
- Message Queue : 다른 스레드 혹은 스레드 자기 자신으로부터 전달받은 메시지를 보관하는 Queue
- Looper : Message Queue에서 메시지, Runnable 객체를 차례로 꺼내 Handler가 처리하도록 전달
- Handler : Looper로부터 받은 메시지, Runnable 객체를 처리하거나 메시지를 받아서 Message Queue에 넣는 '스레드 간 통신 장치'
Looper
- Message Queue에서 메시지, Runnable 객체를 차례로 꺼내 Handler가 처리하도록 전달
- Mainactivity가 실행됨과 동시에 반복문이 무한루프를 돌고 있는 서브 스레드로 생각하면 좋다.
- Looper는 대기하고 있다가 자신의 큐에 쌓인 메시지를 Handler에 전달한다.
- 여러 개의 Background에서 큐에 메시지를 입력하면, 입력된 순서대로 하나씩 꺼내 Handler에 전달한다.
Handler
- Looper로부터 받은 메시지, Runnable 객체를 처리하거나 메시지를 받아서 Message Queue에 넣는 '스레드 간 통신 장치'
- Looper가 있는 Main Thread에서 주로 사용되며, 새로 생성된 스레드들과 Main Thread 사이의 통신을 담당
- Looper를 통해 받은 메시지를 처리하는 일종의 명령어 처리기
- 앱 실행시 무한루프를 도는 Looper와 다르게, Handler는 개발자가 직접 생성해 사용해야 한다.
Message
- Message는 Looper의 큐에 값을 전달하기 위해 사용되는 Class
- 메시지 객체에 미리 정의해둔 코드를 입력하고, 큐에 담아두면, Looper가 꺼내서 Handler에 전달한다.