Android/Android 일반

핸들러(Handler), 루퍼(Looper), 메시지큐(Message Queue)

lipnus 2019. 3. 26. 11:51
반응형



Handler

스레드 간의 통신장치


1.  Looper로부터 받은 Message를 처리한다. 

2. 다른 스레드로부터 메시지를 받아서 Message Queue에 넣는 역할을 한다.



- Handler는 스레드의 Message Queue와 연계하여 MessageRunnable객체를 받거나 처리하여 스레드 간의 통신을 할 수 있도록 한다.


- Handler 객체는 하나의 스레드와, 해당 스레드의 Message Queue에 종속된다.


- 새로 Handler 객체를 만든 경우 이를 만든 스레드와 해당 스레드의 Message Queue에 바인드된다.


- 다른 스레드의 속한 Handler의 postsendMessage 등의 메서드를 호출해서 다른 스레드로 메시지를 전달 할 수 있다.


- Message Queue는 기본적으로 선입선출이지만 전달 시점에 다른 메서드를 사용하여 Queue의 맨 위로 보내거나, 원하는 만큼 Message나 Runnable 객체의 전송을 지연시킬 수도 있다.




리턴값메서드명인자설명
voidhandleMessageMessage msgLooper가 Message Queue에서 꺼내준 Message나 Runnable 객체를 처리 
(상속 시 구현 필수)
final booleanpostRunnable rMessage Queue에 Runnable r을 전달
final booleansendMessageMessage msgMessage Queue에 Message msg를 전달
final booleanpostAtFrontOfQueueRunnable rMessage Queue의 맨 앞에 Runnable r을 전달
final booleansendMessageAtFrontOfQueueMessage msgMessage Queue의 맨 앞에 Message msg를 전달
final booleanpostDelayedRunnable r, long delayMillisdelayMillis만큼 지연 후 Message Queue에 Runnable r을 전달
final booleansendMessageDelayedMessage msg, long delayMillisdelayMillis만큼 지연 후 Message Queue에 Message msg를 전달






Looper


-무한히 돌며 Message Queue에 들어있는 MessageRunnable객체를 차례대로 꺼내서 Handler에 전달한다. 


-메인스레드는 기본적으로 Looper를 가지고 있다.


-새로 생성한 스레드는 Looper를 가지고 있지 않다. run매소드만 실행한 후 종료하기 때문에 메시지를 받을 수 없다.


-새로 생성한 스레드에서 메시지를 받으려면 다음과 같은 매소드들을 사용한다.

parepare(): Looper생성

loop(): 루프 돌기

quit(): 즉시중단

quitSafety(): Message Queue에 쌓인 메시지를 처리한 후 종료. 





Message, Runnable객체


-Message는 매번 생성하면 성능문제가 있으니, Message Pool의 객체를 재사용.


obtain(): 빈 Message객체

obtain(Hander h, int what ...): 목적 hander와 다른 인자들을 담은 Message객체를 리턴


새 스레드 만들기

1. Thread()클래스를 상속한 서브클래스를 만든다음 Thread클래스의 run() 매소드를 오버라이드

2. Runnable 인터페이스를 구현한 클래스를 선언하고 run()매소드 구현

 

스레드 구현방법 (Thread클래스 상속, Runnable인터페이스 구현)




HandlerThread

안드로이드의 스레드는 기본적으로 Looper를 가지지 않는다.

HandlerThread는 기본적으로 Looper를 가지는 스레드이다. 


 



참고: https://academy.realm.io/kr/posts/android-thread-looper-handler/

반응형