EventBus和RxJava有什么区别?

Hid*_*oid 50 android event-bus rx-java

我对android中的EventBus和RxJava之间的区别感到困惑.我需要为我的问题实现其中一个关于在完成一些更改时通知某些组件的问题,以便他们可以更新其状态.
另外,我读到EventsBus已经被RxJava弃用了,我不知道这些信息是否属实.

Ves*_*sko 99

EventBus并且RxJava它们的性质不同.

EventBus只是一个bus作为名字暗示-它提供了机制来订阅和发布事件到"总线",没有你关心的布线是怎么做的,这个"总线"其实是等在Android中的背景下,什么EventBus是只是一种更简单的方法来处理发送和接收Broadcast更少样板的消息.

RxJava另一方面,这比那更强大.是的,您可以订阅和发布事件,但您可以更好地控制流程 - 频率,线程发生的一切,等等.RxJava(在我看来)的主要功能是您可以非常轻松地操纵发布的数据,使用它的一些吨operators.

总结一下 - 如果你只关心发布一些事件并在收到时执行某些操作 - 你可能最好使用两者中最简单的一种,即某种Bus,甚至是普通的旧事物BroadcastReceiver.如果您还将受益于转换数据,处理线程或简化错误处理 - 请采用该RxJava方法.请记住,RxJava通常有一个陡峭的学习曲线,因此需要一些时间来习惯其概念.

  • @HiddenDroid:想不出`EventBus`的任何特定缺点 - 它总是归结为你的任务.正如我在回答中所说 - 如果你只需要发送一些/回应一些事件 - 公共汽车将完美地完成工作.如果您的任务比这更复杂 - 也许值得探索其他解决方案.诀窍是为任务找到合适的工具,所以如果你需要的只是1-2 BroadcastReceivers,就不需要将自己推入RxJava ...... (3认同)
  • @HiddenDroid是的; 你可以继续使用EventBus,但在我看来,RxJava可以为其运营商提供很多东西.RxJava越来越受欢迎(实际上不仅仅是RxJava,一般的反应式编程),你会发现很多库都在它们的API中包含它(例如,Retrofit).另外,一旦你习惯它,使用它真的很方便. (2认同)

inm*_*yth 5

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

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

它如何与 RxJava 混合?首先,RxJava 结合了 Observable 模式。这里观察者观察一个可观察对象并在事件到达时做出反应。Observable 有多个子类,其中Subject 具有Observable 和Observer 的属性。由于它的工作原理是捕获事件并将其发布给订阅者,因此从技术上讲,它充当事件总线。

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