问题描述
过去,我在聊天和出租车应用程序中使用 LocalbroadcastManager and EventBus
,但现在已弃用或不推荐使用它们。
我打算用像 mutablesharedflow or channel
这样的新数据结构替换它们,
我想知道哪个更适合我的情况?或者其他数据结构?
解决方法
从 Roman Elizarov 开始,通道被添加为协程间通信原语。
您不能使用通道以允许多个订阅者独立接收和响应事件或状态更新的方式分发事件或状态更新。
所以他们引入了Flow
。但是 Flow 是一个冷的 observable,每个订阅者都获得自己的数据(独立于其他订阅者)。使用 SharedFlow,您将获得一个热的 observable,它独立于任何订阅者而发出。
您可以对 ConflatedBroadcastChannel 执行相同操作。但是JetBrains 建议使用 Flow 而不是 Channels,因为它们的 API 更简单。
所以如果你想迁移到 Coroutines 并且你需要一个热门的 observable 多个订阅者可以收听,你应该选择 SharedFlow
。