Как повторно запустить таймер после его остановки?

Рейтинг: 1Ответов: 1Опубликовано: 29.05.2023

Подскажите, как после остановки таймера timer.cancel() снова запустить его?

val timer = Timer()
Column {
    Button(onClick = {
        timer.cancel()
    }) {
        Text("Stop")
    }
    Button(onClick = {
        myTimer(timer)
    }) {
        Text("Start")
    }
}

fun myTimer(timer: Timer){
    timer.schedule(delay = 0, period = 1000) {
        println("Timer")
    }
}

При таком коде у меня выходит ошибка:

Timer already cancelled.

Ответы

▲ 1Принят

В документации к методу schedule сказано, что метод бросает IllegalStateException, если таймер был отменен. То есть повторно запустить таймер нельзя, создавайте новый объект таймера.

Например, это можно сделать так:

var timer by remember { mutableStateOf<Timer?>(null) }
Column {
    Button(onClick = {
        timer?.cancel()
        timer = null
    }) {
        Text("Stop")
    }
    Button(onClick = {
        if (timer == null) {
            timer = scheduleTimer()
        }
    }) {
        Text("Start")
    }
}

Создание нового экземпляра Timer и его запуск:

fun scheduleTimer(): Timer {
    val timer = Timer()
    timer.schedule(delay = 0, period = 1000) {
        println("Timer")
    }
    return timer
}