channel 或 mutablesharedflow ,哪个更好地替代已弃用的 localbroadcastmanager

channel or mutablesharedflow , which one is a better replacement for deprecated localbroadcastmanager

过去,我在聊天和出租车应用程序中使用 LocalBroadcastManager and EventBus,但现在已弃用或不推荐使用它们。

我打算用 mutablesharedflow or channel 之类的新数据结构替换它们, 我想知道哪个更适合我的情况?或者另一种数据结构?

Roman Elizarov 开始,通道被添加为协程间通信原语。

You cannot use channels to distribute events or state updates in a way that allows multiple subscribers to independently receive and react upon them.

所以他们介绍了Flow。但是 Flow 是一个冷的可观察对象,每个订阅者都可以获得自己的数据(独立于其他订阅者)。使用 SharedFlow,您将获得一个独立于任何订阅者发出的热可观察对象。

您可以对 ConflatedBroadcastChannel 执行相同的操作。但是 JetBrains 建议使用 Flow 而不是 Channels,因为它们更简单 API.

因此,如果您想迁移到协程,并且需要多个订阅者可以收听的热可观察对象,您应该选择 SharedFlow

两者都适合听一次事件。一切都取决于您的用例。

SharedFlow 称为 hot flow ->

  1. 即使没有观察者在监听它也发出事件
  2. 如果没有观察者在监听它,您将丢失这些事件

频道 称为cold flow

  1. 当没有观察者不在监听时不发出事件。它像 BlockingQueue 一样工作。
  2. 当您开始收集时,它会收集所有已发送的数据。