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
->
- 即使没有观察者在监听它也发出事件
- 如果没有观察者在监听它,您将丢失这些事件
频道 称为cold flow
- 当没有观察者不在监听时不发出事件。它像 BlockingQueue 一样工作。
- 当您开始收集时,它会收集所有已发送的数据。
过去,我在聊天和出租车应用程序中使用 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
->
- 即使没有观察者在监听它也发出事件
- 如果没有观察者在监听它,您将丢失这些事件
频道 称为cold flow
- 当没有观察者不在监听时不发出事件。它像 BlockingQueue 一样工作。
- 当您开始收集时,它会收集所有已发送的数据。