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

     2023-03-14     62

关键词:

【中文标题】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的更好替代品【英文标题】:channelormutablesharedflow,whichoneisabetterreplacementfordeprecatedlocalbroadcastmanager【发布时间】:2021-04-0321:15:20【问题描述】:过去,我在聊天和出租车应... 查看详情

hyperledgerfabric源码解读(5)-channel

参考技术A//在hyperledgerfabric中通道channel其实就是在至少两个成员(members)或组织(orgnization)间专门为私人或机密进行的交易而建立的私有“子网”.//一个通道主要包含:成员-member(组织-orgnization)、每个成员的锚节点(anchorpeer)、共享... 查看详情

channel

一.基本语法c:=make(chanbool)//创建一个无缓冲的bool型Channelc<-x//向一个Channel发送一个值<-c//从一个Channel中接收一个值x=<-c//从Channelc接收一个值并将其存储到x中x,ok=<-c//从Channel接收一个值,如果channel关闭了或没有数据,那么... 查看详情

java.nio.channels的通道定义

...写入之类的不同I/O操作的程序组件)的开放连接。正如在Channel接口中所指定的,通道可以处于打开或关闭状态,并且它们既是可异步关闭的,又是可中断的。多个其他接口扩展了Channel接口,这些接口都指定了新的I/O操作。Readabl... 查看详情

hyperlegerfabricsdk开发——channel(代码片段)

HyperLegerFabricSDK开发(四)——channel一、channel简介1、channel?简介pkg/client/channel支持访问Fabric网络上的通道。channel客户端实例提供与指定通道上的Peer节点进行交互的处理函数。channel客户端可以在指定通道上查询链码,执行链码以... 查看详情

javanio中的channel接口(代码片段)

 Channel 通道,可以将指定文件的部分或全部直接映射成Buffer。 不能直接读写Channel中的数据,Channel只能与ByteBuffer交互。读数据时,把Channel中的数据映射到ByteBuffer中取出数据使用。写数据时,把数据放到Buffer中,再把... 查看详情

javanio之channel

...上是一块可以写入数据,然后可以从中读取数据的内存。Channel通道就是将数据传输给ByteBuffer对象或者从ByteBuffer对象获取数据进行传输。Channel用于在字节缓冲区和位于通道另一侧的实体(通常是一个文件或套接字)之间有效地... 查看详情

我在 Flutter 中创建了一个 android 通知 channel_id,但是,将 FCM 发送到该通道不会导致振动或声音

】我在Flutter中创建了一个android通知channel_id,但是,将FCM发送到该通道不会导致振动或声音【英文标题】:Icreatedanandroidnotificationchannel_idinFlutter,however,sendingFCMtothatchanneldoesnotresultinvibrationorsound【发布时间】:2021-12-0304:26:18【问题... 查看详情

ciscoport-channel设置(链路聚合)

Port-Channel的在实际工作中的主要作用是将两个或多个端口捆绑成为一个虚拟通道。 interfacePort-channel1 descriptionport(1/0/5-6) switchporttrunkencapsulationdot1q switchporttrunkallowedvlan10 switchportmodetrunk 查看详情

go语音之进阶篇channel介绍

1、channel介绍和map类似,channel也一个对应make创建的底层数据结构的引用。 当我们复制一个channel或用于函数参数传递时,我们只是拷贝了一个channel引用,因此调用者何被调用者将引用同一个channel对象。和其它的引用类型一... 查看详情

nio的channel(代码片段)

一channel1.1channel概念流的读写通常是单向的。通道是双向的,可以用于读、写和同时读写操作,通道中的数据总是要先读到一个Buffer,或者总是要从一个Buffer中写入。从通道读取数据到缓冲区,从缓冲区写入数据... 查看详情

go语言学习笔记—进阶—并发编程:通道(channel)——使用channel收发数据(代码片段)

创建channel之后,我们可以使用channel进行数据收发操作。使用channel发送(填充)数据使用特殊的操作符<-,把数据通过channel发送。格式通道变量<-值通道变量是上文通过make创建的通道实例;值可以是变量... 查看详情

javaniochannel通道(代码片段)

Channel概述  Channel是一个通道,可以通过它读取和写入数据,通道与流的不同之处在于通道是双向的,流是单向的;NIO中通过channel封装了对数据源的操作,通过channel我们可以操作数据源,但又不必关心数据源的具体物理结构... 查看详情

手机上的wifi热点设置的channel是啥

channel的解释如下:无线信道也就是常说的无线的“频段(Channel)”,其是以无线信号作为传输媒体的数据信号传送通道。安装无线网络时,通常使用无线网络设备随附的管理工具来设置连接参数。任何无线网络的主要设置项目... 查看详情

ciscoport-channel设置(链路聚合--重点)

Port-Channel的在实际工作中的主要作用是将两个或多个端口捆绑成为一个虚拟通道。 interfacePort-channel1 descriptionport(1/0/5-6) switchporttrunkencapsulationdot1q switchporttrunkallowedvlan10 switchportmodetrunk!interfacePort-channel2 descrip... 查看详情

golangchannel使用总结(代码片段)

...用共享内存来实现线程间通信的方式,golang的哲学是通过channel进行协程(goroutine)之间的通信来实现数据共享:Donotcommunicatebysharingmemory;instead,sharememorybycommunicating.这种方式的优点是通过提供原子的通信原语,避免了竞态情形(racecon... 查看详情

Discord.js 使用@person 和#channel 发送消息

】Discord.js使用@person和#channel发送消息【英文标题】:Discord.jssendingmessagewith@personand#channel【发布时间】:2020-11-2519:26:00【问题描述】:使用我的不和谐机器人,我正在尝试创建欢迎消息。我得到了以下工作:有人加入时发送消息... 查看详情

[golang]互斥到底该谁做?channel还是mutex

channel–本质上是一个MessageQueue–非常正统的执行体间通讯设施•sync.Mutex/RWMutex/Cond/etc–不要把channel当做万金油,该Mutex还是要•误区–用channel来做互斥(正常应该让Mutex做)•比如多个goroutine访问一组共享变量•cha... 查看详情