【发布时间】:2021-10-19 06:02:41
【问题描述】:
我目前正在开发一个使用 handler.postDelayed() 的计时器功能
我想在完成n 次后调用相同的函数。
即我想重复一个延迟函数 n 次。
函数示例代码:
fun delayProgress(...){
handler.postDelayed({
......
}, 1000)
handler.postDelayed({
....
}, 2000)
handler.postDelayed({
...
}, 3000)
}
我尝试过的事情:
Kotlin 协程
使用 repeat() 运行阻塞
延迟()
编辑 1:
runBlocking {
launch {
repeat(3) {
delayProgress(...)
delay(3000)
}
}
}
上面的代码没有按预期运行,delay() 阻塞 UI 3 秒,释放时函数 delayProgress() 跳过 3 秒并并行执行 3 次,而不是顺序执行。
【问题讨论】:
-
所以你想打电话给
delayProgressn 次? -
yourScope.launch { repeat(n) { yourFunction(); delay(1000) } }必须工作。您说您“尝试过”它,也许您应该发布您曾经尝试过的代码。 -
阻塞用户界面的不是
delay(),而是runBlocking——正如它的名字所说。您需要删除它并使用适当的范围对象(与您正在执行此操作的 UI 组件的生命周期相关的对象)。要尝试一下,您可以使用GlobalScope.launch(Dispatchers.Main)作为临时方法。
标签: android kotlin delay kotlin-coroutines coroutine