스레드로 타이머 구현

yugyeongKim·2022년 11월 17일
0

안드로이드

목록 보기
11/13
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로 감싸면된다.

soundPool참고

0개의 댓글