본문 바로가기

안드로이드 앱 프로그래밍

[안드로이드] Thread Handler 사용하기


안드로이드에서는 백그라운드에서 돌아야 하는 기능을 만드는 방식을 두가지로 나눠 볼 수 있다.


1. 서비스 : 백그라운드 작업은 서비스로 실행하고, 사용자에게는 알림 서비스를 이용해 알려줍니다. 만약 메인 액티비티로 결과값을 전달하고 이를 이용해 다른 작업을 수행하고자 한다면 브로드캐스팅을 이용해 결과값을 전달 할 수 


2. 스레드 : 스레드는 동일 프로세스 상에 있기 때문에 작업 수행 결과를 바로 처리할 수 있습니다. 그러나 UI 객체는 직접 접근 할 수 없으므로 핸들러 객체를 사용합니다.


그렇다면, 스레드의 핸들러는 무엇인가?


우리가 만든 어플을 실행 시키게 되면, 어플을 위한 프로세스가 생성됩니다. 

그리고 프로세스가 생성되면 메인스레드는 새로 만들어지는 윈도우를 위한( 액티비티, 브로드캐스트 수신자 등) 메시지큐를 실행 하게 됩니다. 

이 메세지큐를 이용해 순차적으로 코드를 수행 할 수 있으며, 이렇게 "메세지큐를 이용해서 메인스레드에서 처리할 메시지를 전달하는 역할을 담당하는 것이 핸들러 클래스 입니다." 

결국 핸들러는 실행하시를 원하는 특정 기능이 있을 때 현재 수행되고 있는 스레드가 아닌 메인스레드에서 실행시키고자 할 때 사용하게 됩니다. 

핸들러를 이용하면 특정 메시지가 미래의 어떤 시점에서 실행 되도록 스케줄링 할 수 있습니다.


아래의 코드는 1초마다 progress bar가 5씩 증가하도록 하는 프로그램입니다. 메세지큐를 활용하는 방법에 대해 간략하게 코드로 표현 해 보았는데 그 과정은,


1. 메세지큐에서 메시지 객체를 받아온다.


2. 메시지 객체에 메인스레드에서 실행 될 것을 담는다. 


3. 메시지큐에 들어간 순서대로 Handler가 처리한다.


로 간단하게 말할 수 있습니다.