Handler란?
Handler는 안드로이드에서 스레드 간 통신을 위한 중요한 도구입니다.
스레드는 애플리케이션에서 동시에 실행되는 독립적인 작업 단위이며, Handler는 이러한 스레드 간에 메시지를 전달하고 처리하기 위한 메커니즘을 제공합니다.
Handler는 주로 백그라운드 스레드와 UI 스레드 사이의 통신에 사용됩니다.
Handler와 스레드 간 관계
안드로이드에서는 메인(UI) 스레드와 백그라운드 스레드로 구분됩니다.
메인 스레드는 애플리케이션의 UI 요소를 처리하고, 백그라운드 스레드는 복잡한 작업을 처리합니다.
하지만 메인 스레드에서 오랜 시간 동안 작업을 처리하면 애플리케이션이 응답하지 않는 것처럼 보이기 때문에 긴 작업은 백그라운드 스레드에서 처리해야 합니다.
Handler를 사용하면 백그라운드 스레드에서 작업을 완료한 후 결과를 메인 스레드로 전달할 수 있습니다. 이를 통해 UI 갱신이나 애플리케이션 상태의 변경과 같은 작업을 안전하게 수행할 수 있습니다.
Handler에 메시지를 포함하여 전송하는 예제
다음은 Handler를 사용하여 메시지를 포함하여 전송하는 예제입니다.
Handler handler = new Handler(Looper.getMainLooper()) {
@Override
public void handleMessage(Message msg) {
// 메시지 처리
String data = (String) msg.obj;
Log.d("TestLog", data);
}
};
// 백그라운드 스레드에서 핸들러에 메시지 전송
new Thread(() -> {
// 메시지 생성 및 전송
Message message = Message.obtain();
message.obj = "hello world";
handler.sendMessage(message);
}).start();
위의 코드에서는 별도 스레드에서 핸들러에 메시지를 전송합니다. 메인 스레드의 핸들러는 전달된 메시지를 처리하여 UI 요소를 업데이트합니다.
Handler를 사용하여 반복 처리 예제
다음은 Handler를 사용하여 일정한 간격으로 작업을 반복하는 예제입니다.
// 핸들러 생성
Handler handler = new Handler(Looper.getMainLooper());
// 반복 작업 시작
Runnable runnable = new Runnable() {
@Override
public void run() {
// 작업 수행
// ...
// ...
// 핸들러에 다시 작업 예약
handler.postDelayed(this, 1000); // 1초마다 반복
}
};
// 반복 작업 예약
handler.post(runnable);
위의 코드에서는 performTask 메서드를 호출하여 반복 작업을 수행한 후, 핸들러에 다시 작업을 예약합니다. postDelayed 메서드를 사용하여 지정된 시간 간격으로 작업이 반복되도록 설정합니다.
Handler는 반복적인 작업을 처리하고 스레드 간 통신을 용이하게 해주는 강력한 도구입니다. 이를 활용하여 안드로이드 애플리케이션의 다양한 요구사항을 효과적으로 구현할 수 있습니다.
오늘은 Handler를 활용하여 다른 스레드에서 메시지를 전달하고 이 메시지를 핸들러가 수신하여 처리하는 방법에 대해 알아보았습니다.