Android EventBus和RxJava之间有什么区别?

Android EventBus和RxJava之间有什么区别?,android,rx-java,event-bus,Android,Rx Java,Event Bus,我对android中EventBus和RxJava之间的区别感到困惑。我需要为我的问题实现其中一个,即在某些更改完成时通知某些组件,以便它们可以更新其状态。 此外,我还了解到EventsBus已被RxJava弃用,我不知道这些信息是否属实。EventBus和RxJava的性质不同 EventBus顾名思义,它只是一个总线——它提供了订阅和发布事件到“总线”的机制,而无需关心如何连接,这个“总线”实际上是什么,等等。在安卓环境中,EventBus只是一种更简单的方法,可以用更少的模板来处理发送和接

我对android中EventBus和RxJava之间的区别感到困惑。我需要为我的问题实现其中一个,即在某些更改完成时通知某些组件,以便它们可以更新其状态。

此外,我还了解到EventsBus已被RxJava弃用,我不知道这些信息是否属实。

EventBus
RxJava
的性质不同

EventBus
顾名思义,它只是一个
总线
——它提供了订阅和发布事件到“总线”的机制,而无需关心如何连接,这个“总线”实际上是什么,等等。在安卓环境中,
EventBus
只是一种更简单的方法,可以用更少的模板来处理发送和接收
广播
消息

另一方面,
RxJava
比这强大得多。是的,您可以订阅和发布事件,但是您可以对进程频率、线程上发生的一切等进行更多的控制。
RxJava
(在我看来)的主要功能是,您可以使用大量的
操作符来非常轻松地操作发布的数据


总而言之,如果您只关心发布一些事件并在收到时执行一些操作,那么最好使用这两种方法中最简单的一种,即某种
总线
,甚至是普通的
广播接收器。如果您还可以从转换数据、处理线程或简化错误处理中获益,请选择
RxJava
方法。请记住,
RxJava
通常具有陡峭的学习曲线,因此需要一些时间来适应它的概念

Live@Vesko写道,RxJava和事件总线的性质不同,可能用于解决不同的问题。尽管如此,在某些情况下,两者都可以解决相同的问题(尽管代价不同),这可能是许多人混淆这两个概念的原因

RxJava在概念上类似于不久前发布的Android LiveData,为了更好地理解这些概念以及事件总线,我建议您阅读我的文章。在这篇文章中,我回顾了这些概念,描述了我们应该使用一个而不是另一个的场景,以及使用一个而不是另一个的优缺点。我认为这可能对你有用:


如果要从服务器获取数据并更新UI,请使用RxJava+Refrofit。如果在不获取数据的情况下更新UI或执行某些操作,EventBus就足够了。

要理解RxJava,请考虑一个列表。如今,使用函数方法(map、groupBy等)可以轻松地处理列表,如转换、拆分、合并。RxJava使用相同的原则,只是它的主要目标不是列表,而是流。流是异步的,通常是实时数据,如websocket频道或在线电影

事件总线源于对类的解耦需求,而在Android中,类通常与生命周期绑定。作为一个实例,网络回调和活动视图的紧密耦合导致了大量空指针异常。事件总线及其发布者-订阅者模式缓解了此问题

它是如何与RxJava混合的? 首先,RxJava合并了可观察的模式。在这里,观察者观察一个可观察对象,并在事件到达时作出反应。可观测对象有几个子类,其中主体既具有可观测属性,又具有观察者属性。由于它通过捕获事件并将其发布给订阅者来工作,所以从技术上讲,它起到了事件总线的作用


使用RxJava作为事件总线明智吗?不会。RxJava会为了更简单的目的引入不必要的复杂性。仅当应用程序确实操作流时才使用它。例如,将电影流中的帧与另一个流中的字幕配对。如果应用程序只是使用RESTAPI,并且需要将回调与活动/片段解耦,那么事件总线就足够了

据我所知,它们的用途稍有不同,但基本上,RxJava可以做的比EventBusOtto不受欢迎的多,而GreenRobot则不然。我投票重新打开这个问题,因为链接到重复的问题没有这里的答案那么有价值(那里发布的唯一答案只涉及RxJava)。@DanielF你也把VTC作为重复吗?@TiagoMartinsPeres-不,我没有。如果这个重新开放我会的。谢谢你的回答。使用EventBus的缺点是什么?与RxJava相比,它是否受到限制?@HiddenDroid是的;您可以继续使用EventBus,但在我看来,RxJava可以为其运营商提供很多服务。RxJava越来越受欢迎(实际上不仅仅是RxJava,一般来说是反应式编程),您会发现许多库在其API中都包含它(例如,改型)。另一方面,一旦你习惯了它,使用它真的很方便。@HiddenDroid:想不出
EventBus
有什么具体的缺点-它总是归结于你的任务是什么。正如我在回答中所说的,如果你只需要发送一些信息/回复一些事件,那么公交车将完美地完成这项工作。如果你的任务比这更复杂——也许值得探索其他解决方案。诀窍是为任务找到合适的工具,因此如果您只需要1-2个广播接收器,就不需要强迫自己使用RxJava…@Vesko谢谢您的回答。我可以从您的网站上了解到,当任务更复杂时,不建议使用EventBus。我真正想了解的是,什么是EventBus体系结构中的消极因素,使其无法处理复杂的任务?@HiddenDroid,并不是不推荐使用EventBus,而是取决于手头的任务。比较两者就像比较桔子和苹果——它们有不同的目的。
RxJava
的威力在于