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

Posted

技术标签:

【中文标题】channel 或 mutablesharedflow ,哪个是已弃用的 localbroadcastmanager 的更好替代品【英文标题】:channel or mutablesharedflow , which one is a better replacement for deprecated localbroadcastmanager 【发布时间】:2021-04-03 21:15:20 【问题描述】:

过去,我在聊天和出租车应用程序中使用 LocalBroadcastManager and EventBus,现在要么已弃用,要么不建议使用它们。

我打算用mutablesharedflow or channel这样的新数据结构替换它们, 我想知道哪一个更适合我的情况?或者可能是其他数据结构?

【问题讨论】:

【参考方案1】:

来自Roman Elizarov,频道被添加为协程间通信原语。

您不能使用通道以允许多个订阅者独立接收和响应它们的方式分发事件或状态更新。

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

您可以对ConflatedBroadcastChannel 执行相同的操作。但 JetBrains 建议使用 Flow 来支持 Channel,因为它们的 API 更简单。

所以如果你想迁移到 Coroutines 并且你需要一个热的 observable 多个订阅者可以收听,你应该选择SharedFlow

【讨论】:

非常感谢您的评论,非常有帮助。我实际上忘了考虑 MutableStateFlow,我想知道您在这种情况下对 StateFlow 和 SharedFlow 的看法? 不客气。 StateFlow 扩展了 SharedFlow。它是相同的,但具有缓存的value 属性。因此,您可以随时获取它的最新状态,即使在像yourStateFlow.value 这样的流观察之外。因此,如果您不仅想通知,还允许其他人询问流的当前状态/值,您应该使用StateFlow

以上是关于channel 或 mutablesharedflow ,哪个是已弃用的 localbroadcastmanager 的更好替代品的主要内容,如果未能解决你的问题,请参考以下文章

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

java.nio.channels的通道定义

HyperLedgerFabric源码解读(5)-channel

channel

go语音之进阶篇 channel介绍

Java NIO中的Channel接口