[Kotlin]Handler 이용하여 메인 UI 건드리기

(메인 쓰레드 제어하기)


Timer등을 설정해서 로직을 돌리다보면 이벤트에 따라 UI가 변경되어야하는 경우가 있습니다.

 

쉽게말해 UI를 건드리기 위해 서브쓰레드에서 메인쓰레드를 제어한다는건데, 여기서는 Timer를 실행했을때를 예시로 들겠습니다.

 

 - Timer를 통해 i를 증가시키기

private fun timerTest() {
  var i = 0
  myTimer = timer(period = 1000) {
    i++
    handlerTest(i)
  }
}​

  > 위처럼 타이머를 설정하여 1초(period=1000)마다 i를 증가시킨다는 예시를 들겠습니다.

 

 - Handler를 생성하여 UI를 바꿔주기

private fun handlerTest(msg:Int) {
    val handler : Handler = object : Handler(Looper.getMainLooper()) {
        override fun handleMessage(inputMessage: Message) {
            timer_text.setText(msg)
        }
    }
    handler.obtainMessage().sendToTarget()
}

 

  > timerTest 함수에서는 i를 증가시켜 handlerTest 함수에 해당 i값을 매개변수로 넘겨주어 메인쓰레드(UI)를 제어하는 형식입니다.

  > 위 함수에서는 timer_text(TextView)에 1씩 증가시켜 UI단에서 보이게 해줍니다.

 

 *** Reference : https://developer.android.com/reference/android/os/Handler?hl=en

 

Handler  |  Android 개발자  |  Android Developers

Handler public class Handler extends Object java.lang.Object    ↳ android.os.Handler A Handler allows you to send and process Message and Runnable objects associated with a thread's MessageQueue. Each Handler instance is associated with a single thread and

developer.android.com

 *** 소스에 문제가 있을 시 댓글달아주시면 최신화하도록 하겠습니다. 감사합니다.

 

+ Recent posts