Удалить очередь Runnable - PullRequest
       7

Удалить очередь Runnable

0 голосов
/ 10 января 2020

Функция showSnackBarInfo() запускается несколько раз в лямбде, когда вызывается метод startTimer:

private var timer: CountDownTimer? = null
private val handler = Handler(Looper.getMainLooper())
private val timerAction = Runnable { showSnackBarInfo() }
var timerDuration = TimeUnit.SECONDS.toMillis(10)


fun showSnackBarInfo() {
    Log.d("some", "showSnackBarInfo")
}

fun startTimer() {
    handler.removeCallbacks(timerAction)
    handler.postDelayed(timerAction, timerDuration)
}

fun cancelTimer() = handler.removeCallbacks(timerAction)

1 Ответ

0 голосов
/ 10 января 2020

Решил мою проблему с TimerTask:

private var timerDuration = TimeUnit.MINUTES.toMillis(1)
private var timer: Timer? = null

fun showSnackBarInfo() {
    viewContract.showInfoMessage()
}

fun startTimer() {
    timer?.cancel()
    timer = Timer().apply {
        schedule(object : TimerTask() {
            override fun run() {
                showSnackBarInfo()
            }
        }, timerDuration)
    }
}

fun cancelTimer() {
    timer?.cancel()
    timer?.purge()
    timer = null
}
...