我如何将协程通道与实时数据协程构建器(androidx.lifecycle:lifecycle-livedata-ktx architecture component)
结合使用,以不断侦听从Websocket库到ReceiveChannel<String>
的消息?
我的第一个想法就是像这样实现它
val user: LiveData<String> = liveData {
while(true) {
val data = myWebsocketChannel.receive() //Channel suspend function
emit(data)
}
}
但是,这感觉有点“不实用”,我的直觉告诉我,有一个更好的解决方法。 从协程通道接收到发布数据后,还有更好的方法吗?
答案 0 :(得分:0)
我会这样写:
val user: LiveData<User> = liveData {
myWebsocketChannel.consumeEach { data ->
emit(data)
}
}
myWebsocketChannel.consumeEach { ... }
将永远进行迭代(如果通道为空,则将暂停),直到有人关闭myWebsocketChannel
。在生产者方面-我们正在侦听套接字的地方,应注意不要过早关闭通道。
希望它会有所帮助:)