【问题标题】:Execute code after 2 seconds in pure Kotlin在纯 Kotlin 中 2 秒后执行代码
【发布时间】:2020-06-03 08:49:05
【问题描述】:

我需要在等待两秒后执行一些代码(不阻塞 UI 线程)。问题是这通常可以使用 Timer 或 Handler 解决,但我的应用程序使用的是 Kotlin Multiplatform,所以我需要它只是纯 Kotlin,而不是任何 Java 库。

如果我愿意,我还需要能够取消计时器。

我看到this answer 提出或多或少相同的问题,但他们使用以下方法解决了问题:

runBlocking {
    println("Wait for 5sec")
    delay(5000)
    println("Done waiting for 5sec")
}

但我真的不知道如何取消它,也不知道这是否会阻止应用程序的其余部分。

【问题讨论】:

  • 你差不多完成了,而不是 runBlocking 只需将它启动到像 Dispatchers.Main 或 Dispatchers.Default 这样的调度程序。它不会阻止任何东西。
  • @AnimeshSahu 那也可以取消吗?
  • 是的!协程本身是可取消的,除非它阻塞了某些东西,在启动的情况下它不会阻塞。

标签: android kotlin kotlin-multiplatform


【解决方案1】:

您可以在启动协程时获得Job 引用。你可以这样做:

    val job = coroutineScope.launch {
        delay(1000)
        doYourStuff()
    }

之后你可以使用job.cancel(),或者你需要的任何东西。此外,您可以像这样定义协程范围。

CoroutineScope(Dispatchers.Main)

或任何其他适合您需求的调度程序。 祝你好运。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多