본문 바로가기
Kotlin/Kotlin 팁

안드로이드 쓰레드와 타이머 활용하기

by MonoSoft 2022. 9. 13.
728x90
반응형

안드로이드 쓰레드와 타이머 활용하기

 

위와 같이 화면을 꾸며준다. 흔히 타이머 화며냐이다.

 

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"

}

}

 

 

728x90
반응형

댓글