안드로이드 쓰레드와 타이머 활용하기
위와 같이 화면을 꾸며준다. 흔히 타이머 화며냐이다.
package com.monosoft.threadtimer
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.os.Handler
import android.os.Message
import kotlinx.android.synthetic.main.activity_main.*
import kotlin.concurrent.thread
class MainActivity : AppCompatActivity() {
var started = false
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
buttonStart.setOnClickListener { start() }
buttonPause.setOnClickListener { pause() }
buttonStop.setOnClickListener { stop() }
}
val SET_TIME = 51
val RESET = 52
//UI접근 핸들러 서브쓰레드로 동작함
val handler = object : Handler() {
//컨트롤 + o 눌러서 추가
override fun handleMessage(msg: Message) {
//안드로이드 메세지 처리
when (msg.what) {
SET_TIME-> {
textTimer.text = formatTime( msg.arg1) //"$total"
}
RESET -> {
textTimer.text = "00 : 00"
}
}
}
}
fun start() {
started = true //타이머 진행상태 플래그
//서브 쓰레드 시작
thread(start=true) {
while(true) {
var total = 0
Thread.sleep(1000)
f (!started) break
total = total + 1
//메세지로 보냄
val msg = Message()
msg.what = SET_TIME
msg.arg1 = total
handler.sendMessage(msg)
/*
//쓰레드는 UI에 직접 접근을 못하는데 아래코드로 간단히 접근할수있다.
runOnUiThread {
textTimer.text = formatTime(total) //"$total"
}
*/
}
}
}
fun pause() {
started = false
}
fun stop() {
started = false
textTimer.text = "00 : 00"
}
fun formatTime(time:Int) : String {
val minute = String.format("%02d",time/60) //나누기 60
val second = String.format("%02d", time%60) //나머지 60
return "$minute : $second"
}
}
'Kotlin > Kotlin 팁' 카테고리의 다른 글
Android HTTP 통신을 위한 Retrofit 사용하기 (0) | 2022.09.14 |
---|---|
안드로이드 카메라 갤러리 권한처리 (0) | 2022.09.08 |
안드로이드 SQLite 조회수정삭제 (0) | 2022.09.06 |
안드로이드 디바이스 파일탐색기 (0) | 2022.09.05 |
안드로이드 뒤로가기 빽 버튼 적용하기 (0) | 2022.09.02 |
댓글