반응형
SMALL
핸들러(Handler)는 특정 이벤트나 상황이 발생했을 때, 그에 대한 특정 작업을 수행하도록 미리 작성된 코드이다.
이해하기 쉽게 설명하자면, 아침에 일어날 때 알람을 맞춰논다. 알람을 맞춘 시간이 되면 알람이 울리면서 일어나게 되는데, 이때 '알람 소리가 울리는 시간'이 이벤트고, 알람이 울리는 그 순간에 '알림음이 울림' 이 핸들러다. 즉, 어떤 일이 벌어질 때, 그에 맞는 행동을 하도록 미리 정해놓은 코드를 핸들러라고 할 수 있다.
메세지 큐(Message Queue)
: 비동기 통신을 위한 데이터 구조로, 프로세스 간 또는 앱 간에 메세지를 안전하게 전송하고 처리할 수 있도록 돕는 시스템이다.
- 메세지 큐를 사용하면 작업을 비동기적으로 처리할 수 있어 UI 스레드의 차단을 방지할 수 있다.
- 작업 관리 : 여러 작업을 순서대로 처리할 수 있도록 메세지를 큐에 저장하고 하나씩 꺼내여 처리할 수 있다.
Exmaple Code
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.util.Log;
import java.util.LinkedList;
import java.util.Queue;
public class TaskExample {
private static final String TAG = "TaskExample";
private static final int MSG_RUN_TASK = 1;
private Queue<Runnable> taskQueue = new LinkedList<>();
private Handler handler;
public TaskExample() {
handler = new Handler(Looper.getMainLooper(), msg -> {
switch (msg.what) {
case MSG_RUN_TASK:
executeNextTask();
return true;
default:
return false;
}
});
}
//새로운 작업을 큐에 추가한다.
public void addTask(Runnable task) {
taskQueue.add(task);
}
//첫 번째 작업을 실행하기 위해 핸들러에 메시지를 보낸다.
public void executeTasks() {
Message message = handler.obtainMessage(MSG_RUN_TASK);
handler.sendMessage(message);
//handler.sendMessageDelayed(message, 2000); // 2초 후에 메시지 전송
}
//큐에서 다음 작업을 가져와 실행한다. 다음 작업을 실행하기 위해 executeTasks를 재귀적으로 실행한다.
private void executeNextTask() {
if (!taskQueue.isEmpty()) {
Runnable nextTask = taskQueue.poll();
if (nextTask != null) {
handler.post(() -> {
nextTask.run();
executeTasks();
});
}
}
}
public int getRegisteredTaskCount() {
return taskQueue.size();
}
public static void main(String[] args) {
TaskExample taskExample = new TaskExample();
if(getRegisteredTaskCount() > 0) {
taskExample.executeTasks()
}
}
}
poll() : 가장 앞에 있는 작업을 꺼내서 반환
반응형
LIST
'Android' 카테고리의 다른 글
[삽질][Android] 동적 Dialog Fragment 사용하기(feat. Java) (0) | 2024.10.14 |
---|---|
[삽질][Android] 안드로이드 분할 화면 오류(feat. Kotlin) (0) | 2024.10.07 |
Android Webview에서 Json가져오고 사용하기(feat.Gson) (3) | 2024.09.03 |
Android Progressbar 사용하기 (0) | 2024.08.26 |
[Android] AES-256로 개인정보 암호화 및 복호화 하기 feat.Kotlin (0) | 2024.07.31 |