안드로이드/Thread

Handler를 이용한 반복 작업

김어찐 2022. 6. 16. 00:30
728x90

Main Thread에서 반복

Main Thread에서 처리하는 코드(Activity내의 코드) 중에 일정 작업을 계속 반복 처리해야할 경우가 있다.
이 때, while문을 이용하여 무한루프를 운영하면 Main Thread가 종료되지 않아 화면 처리를 할 수 없다.
이러한 문제를 해결하기 위해 다양한 방법을 제공하고 있다.

 

Handler

Handler는 개발자가 안드로이드 OS에게 작업 수행을 요청하는 역할을 한다.
개발자가 작업을 요청하면 안드로이드 OS는 작업을 하지 않을 때 개발자가 요청한 작업을 처리하게 된다.
이 처리는 Main Thread 에서 처리한다.
5초 이상 걸리는 작업은 피하는 것이 좋다.
화면 처리도 가능하다.

package com.example.handler

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.os.Handler
import android.os.Looper
import android.os.SystemClock
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        button.setOnClickListener {
            val now = System.currentTimeMillis()
            textView.text = "버튼 클릭 : $now"
        }


        val handler = Handler(Looper.myLooper()!!)

        // 처리 한번에 대한 작업을 구현해준다.
        val thread1 = object : Thread() {
            override fun run() {
                super.run()
                val now2 = System.currentTimeMillis()
                textView2.text = "handler : $now2"
//                handler.post(this)
                handler.postDelayed(this,100)
            }
        }

//        handler.post(thread1)
        handler.postDelayed(thread1,100)

    }
}

 

728x90