在我目前正在从事的新项目中,我根本没有RxJava依赖项,因为直到现在我都不需要RxJava依赖项-协程很好地解决了线程问题。
在这一点上,我偶然发现了要求具有类似BehaviorSubject
的行为,即可以订阅数据流并在订阅时获得最新的值。据我了解,Channel
在Kotlin中的行为非常相似,所以我决定尝试一下。
根据我所了解的this文章,ConflatedBroadcastChannel
是模仿BehaviorSubject
的渠道类型,因此我声明以下内容:
class ChannelSender {
val channel = ConflatedBroadcastChannel<String>()
fun sendToChannel(someString: String) {
GlobalScope.launch(Dispatchers.Main) { channel.send(someString) }
}
}
要收听该频道,我这样做:
class ChannelListener(val channelSender: ChannelSender) {
fun listenToChannel() {
channelSender.channel.consumeEach { someString ->
if (someString == "A") foo.perform()
else bar.perform()
}
}
}
这可以按预期工作,但是在这一点上,我很难理解如何进行单元测试ChannelListener
。
我试图找到与here相关的内容,但是example-channel-**.kt
类都没有帮助。
感谢与我的错误假设有关的任何帮助,建议或纠正。谢谢。