스레드 연습을 위한 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로 변경
}
'Android' 카테고리의 다른 글
[안드로이드] 코틀린 AsyncTask 연습 - 이미지 다운로드 (0) | 2022.01.28 |
---|---|
[안드로이드] Kotlin 비동기 처리 AsyncTask (0) | 2022.01.27 |
[안드로이드] 코틀린 핸들러와 루퍼 (0) | 2022.01.26 |
[안드로이드] 코틀린 Thread 클래스 / Runnable 인터페이스 사용 (0) | 2022.01.26 |
[안드로이드] 코틀린 메인스레드 / 백그라운드스레드 (0) | 2022.01.26 |