【发布时间】:2021-04-03 21:15:20
【问题描述】:
过去,我在聊天和出租车应用程序中使用 LocalBroadcastManager and EventBus,现在要么已弃用,要么不建议使用它们。
我打算用mutablesharedflow or channel这样的新数据结构替换它们,
我想知道哪一个更适合我的情况?或者可能是其他数据结构?
【问题讨论】:
标签: android kotlin channel flow
过去,我在聊天和出租车应用程序中使用 LocalBroadcastManager and EventBus,现在要么已弃用,要么不建议使用它们。
我打算用mutablesharedflow or channel这样的新数据结构替换它们,
我想知道哪一个更适合我的情况?或者可能是其他数据结构?
【问题讨论】:
标签: android kotlin channel flow
来自Roman Elizarov,频道被添加为协程间通信原语。
您不能使用通道以允许多个订阅者独立接收和响应它们的方式分发事件或状态更新。
所以他们介绍了Flow。但是 Flow 是一个冷的 observable,每个订阅者都有自己的数据(独立于其他订阅者)。使用SharedFlow,您将获得一个独立于任何订阅者发射的热可观察对象。
您可以对ConflatedBroadcastChannel 执行相同的操作。但 JetBrains 建议使用 Flow 来支持 Channel,因为它们的 API 更简单。
所以如果你想迁移到 Coroutines 并且你需要一个热的 observable 多个订阅者可以收听,你应该选择SharedFlow。
【讨论】:
value 属性。因此,您可以随时获取它的最新状态,即使在像yourStateFlow.value 这样的流观察之外。因此,如果您不仅想通知,还允许其他人询问流的当前状态/值,您应该使用StateFlow。