반응형
Handler (반복작업 처리)
- Main Thread 에서 처리하는 코드(액티비티 내부 코드) 중에 일정한 단기 작업을 계속 반복 처리해야 할 때 사용 -> while문을 이용해 무한루프/오래 운영하면 화면 처리를 할 수가 X
- 아무것도 안 하는 순간(텀)을 주면 그 텀 사이에 화면처리를 할 수 있음 (그 외 다양한 방법이 존재)
- 개발자는 Handler를 통해 안드로이드OS 에게 작업 수행을 요청 -> 안드OS는 작업을 하지 않을때 요청 받은 작업 처리(Main Thread 에서 처리)
- 5초 이상 걸리는 작업은 지양, Main Thread 에서 처리하기 때문에 화면처리도 가능
val handler = Handler(Looper.myLooper()!!) // Looper : 대기하고 있다가 작업 요청이 들어오면 처리
// 처리할 작업을 구현 (반복문X, 반복한 작업 하나를 구현!!!)
val thread1 = object : Thread() {
override fun run() {
super.run()
// 5초 이하의 짧은 작업을 굉장히 많이 반복하고 싶을때만 사용
/* thread를 상속받아서 만들었지만 아래 작업은 Main Thread가 가져가 작업함 */
val now2 = System.currentTimeMillis()
binding.textView2.text = "thread : ${now2}" // 화면 작업을 개발자가 동작시킨 스레드에서 수행
//handler.post(this) // 반복 작업 -> 계속 자기 자신을 호출하면서 반복 작업
handler.postDelayed(this, 100) // 100 쉬고 동작 -> 100 사이에 화면 처리
}
}
/* 첫실행 */
//handler.post(thread1)
handler.postDelayed(thread1, 100) // 100 쉬고 동작 (sleep 사용 대신 이걸로 하는거임)
✔️ Main Thread 에서 시간을 출력하는 작업을 무한루프로 진행함 -> 100ms 쉬는 동안 화면 처리를 진행
✔️ Thread를 상속받아 그 안에 구현 했줬기 때문에 Main Thread 와 분리된 것 아니냐고 할 수 있게겠지만 handler로 처리해줌으로서 Main Thread가 해당 작업을 가져가 수행함 (Handler의 Looper가 대기하고 있다가 요청 받은 작업을 수행함. 100 쉬는 동안에는 요청 받은 작업을 쉼)
반응형
'Android' 카테고리의 다른 글
[안드로이드/Thread] RunOnUiThread (0) | 2023.04.17 |
---|---|
[안드로이드/Thread] Handler를 사용한 화면 처리 (0) | 2023.04.17 |
[안드로이드/Thread] Thread 란? (0) | 2023.04.16 |
[안드로이드/메시징] Message Notification (0) | 2023.04.15 |
[안드로이드/메시징] 다양한 Notification (0) | 2023.04.14 |