协同使用协程通道和livedata builder

时间:2019-10-23 08:58:16

标签: android android-livedata kotlin-coroutines

我如何将协程通道与实时数据协程构建器(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)
    }
}

但是,这感觉有点“不实用”,我的直觉告诉我,有一个更好的解决方法。 从协程通道接收到发布数据后,还有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

我会这样写:

val user: LiveData<User> = liveData {
    myWebsocketChannel.consumeEach { data ->
       emit(data)
   }
}

myWebsocketChannel.consumeEach { ... }将永远进行迭代(如果通道为空,则将暂停),直到有人关闭myWebsocketChannel。在生产者方面-我们正在侦听套接字的地方,应注意不要过早关闭通道。

希望它会有所帮助:)