How to create a simple countdown timer in Kotlin?
You can use Kotlin objects:
val timer = object: CountDownTimer(20000, 1000) {
override fun onTick(millisUntilFinished: Long) {...}
override fun onFinish() {...}
}
timer.start()
I've solved my problem with timer in Kotlin like this:
class Timer {
private val job = SupervisorJob()
private val scope = CoroutineScope(Dispatchers.Default + job)
private fun startCoroutineTimer(delayMillis: Long = 0, repeatMillis: Long = 0, action: () -> Unit) = scope.launch(Dispatchers.IO) {
delay(delayMillis)
if (repeatMillis > 0) {
while (true) {
action()
delay(repeatMillis)
}
} else {
action()
}
}
private val timer: Job = startCoroutineTimer(delayMillis = 0, repeatMillis = 20000) {
Log.d(TAG, "Background - tick")
doSomethingBackground()
scope.launch(Dispatchers.Main) {
Log.d(TAG, "Main thread - tick")
doSomethingMainThread()
}
}
fun startTimer() {
timer.start()
}
fun cancelTimer() {
timer.cancel()
}
//...
}
I've used Coroutines for a timer.
Chronometer can be set to count down and it seems to me the easiest way.
Add the Chronometer view in your layout xml, example
<Chronometer
android:id="@+id/view_timer"
tools:targetApi="24"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
Then in your activity or fragment:
view_timer.isCountDown = true
view_timer.base = SystemClock.elapsedRealtime() + 20000
view_timer.start()