반응형
안녕하세요! 오늘은 코틀린에서 제공하는 'kotlin.concurrent.timer'를 이용한 타이머를 구현하는 방법에 대해 간단하게 알아보도록 하겠습니다.
Timer 기본개념
Timer는 메인스레드가 아닌 백그라운드 스레드에서 동작가능합니다. 따라서 메인스레드에서만 가능한 UI작업이 불가능지만 이부분은 Handler 및 runOnUiThread()를 이용하면 충분히 구현이 가능합니다. 오늘은 이 두가지외 코루틴을 이용해서 구현하는 방법을 알아보도록 하겠습니다.
사용방법
private var time: Timer? = null
fun startTimer(milisec: Int) {
var time = milisec
timer?.cancel()
timer = kotlin.concurrent.timer(period = 1000) {
time -= 1000 // 1초주기
CoroutineScope(Main).launch {
if(time < 0) {
(this@timer).cancel()
// 종료후 UI구성
// ..
}
}
}
}
사용방법은 간단합니다. 사용할 Timer객체를 생성한 뒤 kotlin.concurrent.timer() 메소드를 호출하시면 됩니다.
단, 주의할 점으로 위에서도 언급했다시피 백그라운드 스레드에서 동작하기 때문에 UI작업은 반드시 Handler, runOnUiThread() 또는 코루틴을 사용해서 구현하시면 되겠습니다.
timer()의 파라미터로 period를 반드시 선언해주셔야합니다. period는 말그래도 타이머 반복주기를 뜻합니다.
(저의 경우 1초 주기 타이머를 구현하기위해 1000(ms)으로 선언하였습니다.)
* Timer 파라미터
- name: String - 함수실행에 필요한 스레드이름
- daemon: Boolean - 데몬스레드로 동작시킬지 여부
- initialDelay: Long - 실행되기전까지 지연시간
- period: Long - 실행주기(필수값)
반응형
'Android' 카테고리의 다른 글
[안드로이드 / Kotlin] 키해시(Key Hash) 얻기 (0) | 2022.04.06 |
---|---|
[안드로이드 / Kotlin] 코루틴(Coroutine) (0) | 2022.03.21 |
[안드로이드 / Kotlin] BottomSheetDialogFragment (0) | 2022.03.16 |
[안드로이드 / Kotlin] RecyclerView Drag&Drop / Swipe 구현 (0) | 2022.03.15 |
[안드로이드 / Kotlin] 저전력 블루투스 BLE(3), 기기 연결 (0) | 2022.03.15 |