package com.example.myapplication
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import com.example.myapplication.databinding.ActivityMainBinding
class MainActivity : AppCompatActivity() {
private lateinit var viewBinding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
viewBinding = ActivityMainBinding.inflate(layoutInflater)
setContentView(viewBinding.root)
var time = viewBinding.time
Thread() {
for(i in 30 downTo 0) {
Thread.sleep(1000)
viewBinding.time.text = "$i"
}
}.start()
}
}
이렇게 하면 되겠지?
안된다. 해석하자면 오리지널스레드에서나 뷰를 다룰 수 있다는 뜻이다.
이게 뭐냐하면 메인스레드가있고 새로 생성한 스레드(타이머)가 있는데 다른 스레드에서는 view를 다룰 수 없다는 뜻이다
해결하기 위해 나온 것이 핸들러
이걸 사용하면 원래 스레드가 아닌 다른 스레드에서도 뷰를 다룰 수 있다!
19번째줄을 추가하고 view를 다루는 부분을 handler로 감싸면된다.