Kotlin 앱 프로그래밍
(Kotlin)스톱워치 기능 구현
쿠카이든
2022. 4. 23. 22:43
728x90
private fun start(){
btn_start.text = "일시정지"
btn_start.setBackgroundColor(getColor(R.color.red))
isRunning = true
//스톱워치를 시작하는 로직
timer = timer(period = 10) {
time++
val milli_second = time % 100
val second = (time % 6000) / 100
val minute = time / 6000
// 밀리초
tv_millisecond.text = if (milli_second < 10) ".0${milli_second}" else ".${milli_second}"
// 초
tv_second.text = if (second < 10) ":0${second}" else ":${second}"
// 분
tv_minute.text = "${minute}"
}
}
- 위와 같이 스톱워치 시작 기능을 개발한 후, 앱을 실행하면 아래와 같은 에러 메시지가 뜬다.
- 'Only the original thread that created a view hierarchy can touch its views'
- 뜻은 '뷰의 계층 구조를 생성한 메인 스레드에서만 그 뷰들에 접근 할 수 있다' 였다.
- 백그라운드 스레드에서 UI 작업을 해주었기 때문에 일어난 에러이다.
- 따라서 텍스트뷰가 UI 스레드에서 실행되도록 아래와 같이 start() 함수를 수정하여야 한다.
private fun start(){
...
runOnUiThread { // ❶
if (isRunning) { // ❷
// 밀리초
tv_millisecond.text = if (milli_second < 10) ".0${milli_second}" else ".${milli_second}"
// 초
tv_second.text = if (second < 10) ":0${second}" else ":${second}"
// 분
tv_minute.text = "${minute}"
}
};
}
출처 : Must Have Joyce의 안드로이드 앱 프로그래밍 with 코틀린 책
728x90