POST

[안드로이드] 코틀린 스레드(Thread)연습 - 타이머 만들기

스레드 연습을 위한 Timer 앱을 만들어 보자

2022.01.26 - [Android] - [안드로이드] 코틀린 메인스레드 / 백그라운드스레드

2022.01.26 - [Android] - [안드로이드] 코틀린 Thread 클래스 / Runnable 인터페이스 사용

2022.01.26 - [Android] - [안드로이드] 코틀린 핸들러와 루퍼

앱 설명: 시작을 누르면 1초씩 증가하고 종료를 누르면 먼추게 된다.

 

변수의 선언

시간을 저장할 변수와 시작을 알려주는 변수를 선언합니다.

var total = 0 // 전체 시간을 저장
var started = false // 시작 되었는지 체크를 위한 변수

핸들러 생성

스레드로 처리된 값을 메시지에 담아 textView 위젯으로 전달하는 핸들러를 생성

total의 값을 나눈값을 분, 나눈값의 나머지를 초로 전달한다.

val handler = object : Handler() { // Handler 생성
    override fun handleMessage(msg: Message) { // 화면에 시간을 출력하는 Handler
        val minute = String.format("%02d", total / 60) // 분
        val second = String.format("%02d", total % 60) // 초
        binding.textTimer.text = "$minute:$second" // TextView.text속성 변경}
    }
}

시작 버튼 클릭 이벤트

시작 버튼을 클릭시 total과 started 변수의 값을 초기화, total 값을 1씩 증가

binding.buttunStart.setOnClickListener { // buttonStart 위젯 클릭시
    if (started == false) { // started 값이 false일 경우
        started = true // started 값 true로 변경
        total = 0 // total 값 초기화
        binding.textTimer.text = "00:00" // text 속성 초기화

        thread(start = true) { // 스레드 생성
            while (started) { // started 값이true일 경우 반복
                Thread.sleep(1000) // 1초 지연
                if(started) { // started 값이 true일 경우
                    total += 1 // total값을 1씩 더함
                    handler?.sendEmptyMessage(0) // Handler에 메세지 전달
                }
            }
        }
    }
}

 

종료 버튼 클릭 이벤트

종료 버튼 클릭시 started의 값을 false로 변경

binding.buttonStop.setOnClickListener { // buttonStop 위젯 클릭시
    started=false // started 값 false로 변경

}