2010년 1월 21일 목요일

Android 에서 Handler와 Message 란?

Android(안드로이드) 개발시 사용되는 Handler(핸들러)와 통신에 사용되는 Message(메시지)에 대해서 알아보자.

 

핸들러란?

 

안드로이드의 시스템은 사용자가 작성한 UI에서 빠른 응답을 요구하고 있다.

만약 5초 이상의 응당이 없을 경우 최악의 경우 작성된 프로그램이 강제로 종료가 되는 경우도 발생할 수 있다.

이런 상황을 방지하기 위해서 시간이 오래걸리는 작업이 필요한 경우 두가지의 방법으로 해결을 할 수 있다.

첫번째는 시간이 오래걸리는 작업은 서비스로 만들어서 처리하는 방법

두번째는 새로운 쓰레드로 처리를 하는 방법

 

두번째 방법으로 쓰레드를 생성해서 데이터 처리등의 시간이 오래걸리는 작업을 지원하기 위한 클래스가 존재하는데 그것이 핸들러(Handdler)이다.

 

간략하게 요약을 해보면

  • 백그라운드 쓰레드 생성을 위한 가장 유연한 방법이다.
  • 인스턴스 생성시 자동으로 안드로이드가 실행 관리한다.
  • 메시지를 전달받게 되면 호출 되는 handlerMessage()에 실제 처리내용을 구현한다.
  • post(), postDelayed()를 통해서 인자로 실행하고 자하는 Runnable객체를 전달할 수 있다.
  • View단에도 Runnable객처를 인자로 전달가능하고 이럴경우 코드가 심플해지는 경우도 있을수 있지만 Handler를 추천한다.

 

 

메시지(Message)란?

 

UI등에서 실제로 처리를 담당하는 쓰레드로 데이터를 전송하거나 작업을 요청하기 위해서 전달하는 객체이다.

 

  • 핸들러로 전달되는 객체이다.
  • 전달된 메시지는 메시지 Queue를 통해서 핸들러가 가져다 사용한다.
  • 메시지를 전달하기 위해선 핸들러의 obtainMessage()호출해서 메시지 풀의 메시지를 획득해서 전달해야한다.
  • 메시지를 전달하기 위해서는 sendMessage() 등을 사용한다.

 

메시지 전달 방식의 종류

  • sendMessage() - 큐의 마지막에 메시지를 삽입한다.
  • sendMessageAtFrontQueue() - 큐의 맨앞에 메시지를 삽입한다.(우선처리)
  • sendMessageAtTime() - 장비기동시간을 기준으로 삽입한다.(SystemClock.uptimeMillis()참고)
  • sendMessageDelayed() - 특정시간만큼 지연 삽입한다.

 

 

댓글 없음:

댓글 쓰기