티스토리 뷰

Android

[Android] 안드로이드 Handler 개념 및 용도

장구치는 개발자 2020. 2. 2. 22:25

 

handler 사용 예시

안드로이드 개발을 하다보면 handler를 사용하고 있거나 들어본 적이 있을 것입니다. 스레드의 일들을 메시지 큐에 넣어주기 위한 역할을 하기도 하고, 메인 스레드가 아닌 스레드를 핸들러로 직업을 메시지 큐에  전달할때 많이 보았습니다. 안드로이드 개발을 잘 하기 위해서는 기본 개념들에 대해서 잘 정리하고, 이해하고 있어야 합니다. 

 

Handler 정의

각 핸들러는 쓰레드의 메시지큐와 하나의 쓰레드와 연관되어 있다. 핸들러를 사용하면 스레드의 MessageQueue와 관련된 Message 및 Runnable 객체를 보내고 처리 할 수 있습니다. 각 핸들러 인스턴스는 단일 스레드 및 해당 스레드의 메시지 큐와 연관됩니다. 새 핸들러를 만들면 핸들러를 만드는 스레드의 스레드 / 메시지 큐에 바인딩됩니다. 이때부터 메시지와 실행 파일을 해당 메시지 큐로 전달하고 메시지에서 나올 때 실행합니다.

 

핸들러의 두 가지 주요 용도

1) 메시지와 실행 가능 파일이 나중에 실행되도록 스케줄 처리를 합니다. 

 

2) (메인 스레드 이외의) 스레드에서 수행 할 작업을 대기열에 추가합니다.

 

종류

1) post (Runnable) : message queue에 전달하는 메소드

2) postAtTime(java.lang.Runnable, long) : 특정 시간에 message queue에 전달하는 메소드

3) postDelayed (Runnable, Object, long) : 몇초  뒤에 message queue에 전달하는 메소드

4) sendEmptyMessage (int) : Message의 what  필드를 전달하는 메소드 

5) sendMessage (Message) : Message 객체를 message queue 전달하는 메소드

6) sendMessageAtTime (Message, long)

7) sendMessageDelayed

 

Handler를 좀더 잘 이해하기 위해서는 Thread 에 대한 개념도 이해하고 있어야 합니다. 계속해서 정리해서 올리겠습니다.

 

참고 링크 : https://translate.google.com/?hl=ko#view=home&op=translate&sl=en&tl=ko&text=A%20Handler%20allows%20you%20to%20send%20and%20process%20Message%20and%20Runnable%20objects%20associated%20with%20a%20thread's%20MessageQueue.%20Each%20Handler%20instance%20is%20associated%20with%20a%20single%20thread%20and%20that%20thread's%20message%20queue.%20When%20you%20create%20a%20new%20Handler%2C%20it%20is%20bound%20to%20the%20thread%20%2F%20message%20queue%20of%20the%20thread%20that%20is%20creating%20it%20--%20from%20that%20point%20on%2C%20it%20will%20deliver%20messages%20and%20runnables%20to%20that%20message%20queue%20and%20execute%20them%20as%20they%20come%20out%20of%20the%20message%20queue.%0A%0AThere%20are%20two%20main%20uses%20for%20a%20Handler%3A%20(1)%20to%20schedule%20messages%20and%20runnables%20to%20be%20executed%20at%20some%20point%20in%20the%20future%3B%20and%20(2)%20to%20enqueue%20an%20action%20to%20be%20performed%20on%20a%20different%20thread%20than%20your%20own.%0A%0AScheduling%20messages%20is%20accomplished%20with%20the%20post(Runnable)%2C%20postAtTime(java.lang.Runnable%2C%20long)%2C%20postDelayed(Runnable%2C%20Object%2C%20long)%2C%20sendEmptyMessage(int)%2C%20sendMessage(Message)%2C%20sendMessageAtTime(Message%2C%20long)%2C%20and%20sendMessageDelayed(Message%2C%20long)%20methods.%20The%20post%20versions%20allow%20you%20to%20enqueue%20Runnable%20objects%20to%20be%20called%20by%20the%20message%20queue%20when%20they%20are%20received%3B%20the%20sendMessage%20versions%20allow%20you%20to%20enqueue%20a%20Message%20object%20containing%20a%20bundle%20of%20data%20that%20will%20be%20processed%20by%20the%20Handler's%20handleMessage(Message)%20method%20(requiring%20that%20you%20implement%20a%20subclass%20of%20Handler).%0A%0AWhen%20posting%20or%20sending%20to%20a%20Handler%2C%20you%20can%20either%20allow%20the%20item%20to%20be%20processed%20as%20soon%20as%20the%20message%20queue%20is%20ready%20to%20do%20so%2C%20or%20specify%20a%20delay%20before%20it%20gets%20processed%20or%20absolute%20time%20for%20it%20to%20be%20processed.%20The%20latter%20two%20allow%20you%20to%20implement%20timeouts%2C%20ticks%2C%20and%20other%20timing-based%20behavior.%0A%0AWhen%20a%20process%20is%20created%20for%20your%20application%2C%20its%20main%20thread%20is%20dedicated%20to%20running%20a%20message%20queue%20that%20takes%20care%20of%20managing%20the%20top-level%20application%20objects%20(activities%2C%20broadcast%20receivers%2C%20etc)%20and%20any%20windows%20they%20create.%20You%20can%20create%20your%20own%20threads%2C%20and%20communicate%20back%20with%20the%20main%20application%20thread%20through%20a%20Handler.%20This%20is%20done%20by%20calling%20the%20same%20post%20or%20sendMessage%20methods%20as%20before%2C%20but%20from%20your%20new%20thread.%20The%20given%20Runnable%20or%20Message%20will%20then%20be%20scheduled%20in%20the%20Handler's%20message%20queue%20and%20processed%20when%20appropriate.

 

댓글