Deperecated/Android_강의

안드로이드 - RunOnUiThread

누알라리 2020. 2. 18. 00:09
1. RunOnUiThread란

- RunOnUiThread 메서드는 개발자가 발생시킨 일반 Thread에서 코드 일부를 Main Thread가 처리하도록 하는 메서드이다.

- JAVA에서는 메서드로 제공되나 Kotlin에서는 람다식으로 제공되고 있으므로 작성하는 것이 간편하다.

 

- 전의 내용에서는 네트워크나 5초 이상 걸리는 작업들은 Main Thread에서 작업이 안되기 때문에 일반 Thread에서 작업하다가 화면에 대한 처리가 필요하면 Handler나 AsyncTask를 이용하는 방법으로 화면 처리만 Main Thread에게 맡겼다.

- 하지만, 둘 다 클래스를 상속받아야하므로 작업량이 많아졌는데, RunOnUiThread메서드를 사용하면 그 때 그 때 원할 때 마다 Main Thread에 작업을 시킬 수 있다.

 

class MainActivity : AppCompatActivity() {

    var isRunning = false

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


        button.setOnClickListener { view ->
            var time = System.currentTimeMillis()
            textView.text = "버튼 클릭 : ${time}"
        }

        isRunning = true
        var thread = ThreadClass()
        thread.start()

    }

    inner class ThreadClass:Thread()
    {
        override fun run() {
            while (isRunning) {
                SystemClock.sleep(100)
                var time = System.currentTimeMillis()
                Log.d("test1", "쓰레드 : ${time}")

                // 1. 일반 Thread이기 때문에 전OS에서 화면 처리가 가능하지 않다. 이 경우에! runOnUiThread를 넣는다.
            runOnUiThread {
                textView2.text = " ${time}"
            }

            }
        }

    }

    override fun onDestroy() {
        super.onDestroy()

        isRunning = false
    }
}