使用哪个 Kotlin Coroutine 数据源(Channel、Flow 等)?

Which Kotlin Coroutine data source (Channel, Flow,...) to use?

我正在为 Android 编写一个消息传递应用程序(如 whatsapp,...),我目前从最新协程发布的许多东西中丢失了最好的原语。对于第 3 点和第 4 点中描述的队列实现使用什么(Channel、Actor、Flow、ChannelFlow 等)的一些建议,将不胜感激。 我的流程是这样的:

  1. 用户发送消息

  2. 消息存储到数据库(房间)。因此,如果应用程序被杀死,消息不会丢失。

  3. 消息也被提供给队列。在这里使用什么(Actor、Channel、Flow、ChannelFlow)?只要应用程序处于活动状态或出现第 5 点中描述的异常,此队列就应该处于活动状态。

    3.a:我希望是否可以只保存到数据库,并且当队列为空以供发送时,来自 Room 的 Flow 会重新查询内容,但我不知道这是否可能,因为对于每个 insert/update/delete,查询将被触发,我将再次收到所有已经在队列中的消息...

  4. 队列的另一端需要什么来从中获取消息并执行发送消息的挂起函数?

  5. 如果注销并再次登录,如何关闭队列并重新创建队列?我猜 运行 协程所在的 CoroutineScope 应该取消并重新创建,对吗?

感谢您的帮助

我建议向 MessageEntity 添加枚举状态(状态为 QUEUEDSENDINGSENT 或类似的状态)

然后我将采用以下单向流,同时将您的数据库视为 SSO(单一真相来源):

用户发送消息 -> 插入消息 -> Room 发出新的项目流 -> 触发 QUEUED 项目的发送请求 -> 更新消息状态

Flow 有一个很好的 api 可以过滤掉你在上层需要的排放物