본문 바로가기
Kotlin/Kotlin 팁

Android 스레드와 루퍼 타이머 앱 만들기

by MonoSoft 2020. 10. 12.
728x90
반응형

Android 스레드와 루퍼 타이머 앱 만들기

 

위와 같이 화면을 우선 꾸며보쟈!!

 

 

 

 

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)

if (!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
반응형

댓글