android - 在 Kotlin 中使用 Handler 编写计时器

标签 android kotlin

我正在尝试在 Kotlin 中实现一个 Android 计时器,它将在定义的时间间隔内触发一个事件。我不想使用 TimerTask,因为它有记录的弱点( see here ),尽管可能有其他方法可以做到这一点,但我想在延迟后的循环中使用 Handler/Runnable。在 Java 中这是可能的,因为 Runnable 可以在初始化程序中引用它自己,但是在 Kotlin 中这似乎是不可能的:

private fun startBoutiqueRefreshTimer(delayMs: Long) {
    val handler = Handler()
    val runnable = Runnable() {
        EventManager.post(BoutiqueRefreshTimerEvent())
        handler.postDelayed(runnable, delayMs)
    }
    handler.postDelayed(runnable, delayMs)
}

因为在内部 postDelayed 调用中无法解析 runnable。 Kotlin 显然阻止了在他们自己的初始化程序中的变量引用。

如果仍然使用 Handler/Runnable 方法,什么是解决这个问题的好方法?

最佳答案

这会起作用

val updateHandler = Handler()

    val runnable = Runnable {
        updateDisplay() // some action(s)
    }

    updateHandler.postDelayed(runnable, 5000).

private fun updateDisplay() {
      Do actions
}

或者,如果您对 Kotlin 不太熟悉,请编写代码并使用 Ctrl+Alt+Shift+K"。

关于android - 在 Kotlin 中使用 Handler 编写计时器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46001792/

相关文章:

android - 使用 Kotlin for Android 进行数据绑定(bind)的问题

android - 数字选择器空指针(带导游)的原因可能是什么?

android - 带有许多小图像的游戏中出现 OutOfMemoryError

android - LoaderManager 的竞争条件?

android - Android studio 更新后的 Java.lang.ClassNotFoundException

kotlin - 在浏览器中运行 Kotlin HTML Builder

android - WorkManager alpha10 ListenableFuture 用法

java - 如何将应用程序更新标记为立即或灵活(应用程序内更新 API)

kotlin - 在 kotlin 中对其进行了限定

java - 即使我正在处理另一个线程,UI 线程也会卡住