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"
}
}
'Kotlin > Kotlin 팁' 카테고리의 다른 글
안드로이드 포어그라운드 사용 (0) | 2020.10.15 |
---|---|
안드로이드 서비스 활용 (0) | 2020.10.14 |
Android 카메라 사용 방법 - 갤러리 추가 (0) | 2020.10.08 |
Android 카메라 사용 방법 (0) | 2020.10.06 |
ANDROID SQLite 데이터 베이스 사용 방법 2편 (0) | 2020.09.29 |
댓글