我想使用 Kotlin 协程实现计时器,类似于使用 RxJava 实现的:
Flowable.interval(0, 5, TimeUnit.SECONDS)
.observeOn(AndroidSchedulers.mainThread())
.map { LocalDateTime.now() }
.distinctUntilChanged { old, new ->
old.minute == new.minute
}
.subscribe {
setDateTime(it)
}
它将每隔一分钟发出 LocalDateTime。
原文由 Roman Nazarevych 发布,翻译遵循 CC BY-SA 4.0 许可协议
编辑:请注意,原始答案中建议的 API 现在标记为
@ObsoleteCoroutineApi
:您现在可以使用
Flow
API 创建您自己的代码流:您可以以与当前代码非常相似的方式使用它:
注意:使用此处编写的代码,
tickerFlow
未考虑处理元素所花费的时间,因此延迟可能不规则(这是元素处理 之间 的延迟)。如果您希望自动收报机独立于每个元素的处理进行计时,您可能需要使用 缓冲区 或专用线程(例如通过flowOn
)。原答案
我相信它仍处于试验阶段,但您可以使用 TickerChannel 每隔 X 毫秒生成一次值:
如果你需要继续做你的工作,而你的“订阅”为每个“滴答”做一些事情,你可以
launch
一个将从这个频道读取并做你想做的事情的后台协程:如果你想从循环内部停止,你可以简单地跳出它,然后取消通道: