我对于EventBus和RxJava在Android中的区别感到困惑。我需要实现其中一个来解决当一些变化发生时,通知一些组件以便它们可以更新状态的问题。
此外,我听说EventBus已经被RxJava取代,但我不知道这个信息是否正确。
我对于EventBus和RxJava在Android中的区别感到困惑。我需要实现其中一个来解决当一些变化发生时,通知一些组件以便它们可以更新状态的问题。
此外,我听说EventBus已经被RxJava取代,但我不知道这个信息是否正确。
EventBus
和 RxJava
本质不同。
EventBus
就像其名字所示的那样,只是一个“bus”——它提供了一种机制来订阅和发布事件到“bus”,而无需关心连接方式、这个“bus”实际上是什么等等。在 Android 上下文中,EventBus
是更简单的处理发送和接收广播消息的方法,避免了冗长的模板代码。
另一方面,RxJava
要比前者强大得多。是的,你可以订阅和发布事件,但是你对整个过程有更多的控制力——包括频率、执行线程等等。我认为 RxJava
最强大的部分是,你可以很容易地使用它的成吨的操作符来操纵正在发布的数据。
总之——如果你只关心发布某些事件并在接收时执行某些操作,你可能最好使用其中最简单的一种,即一些类型的Bus
,甚至是普通的BroadcastReceiver
。如果你还需要转换数据、处理线程或简化错误处理,则可以选择RxJava
的方法。请记住,RxJava
通常具有陡峭的学习曲线,因此需要一些时间来适应其概念。
EventBus
的具体缺点 - 这总归取决于你的任务是什么。就像我在回答中提到的 - 如果你只需要发送一些/响应一些事件 - 总线将完美地完成工作。如果你的任务比那更复杂 - 或许值得探索其他解决方案。诀窍在于找到适合任务的正确工具,所以如果你只需要1-2个BroadcastReceivers,就没必要使用RxJava了...” - VeskoRxJava
的强大之处在于它的操作符 - 在这里查看:http://reactivex.io/documentation/operators.html。正如您所看到的,您可以轻松地进行转换、过滤、链式处理、缓存、错误处理以及许多其他操作。 - Vesko如果你想从服务器获取数据并更新UI,请使用RxJava + Refrofit。如果只是更新UI或执行一些操作而不需要获取数据,则EventBus就足够了。
Live @Vesko 写道,RxJava 和事件总线在本质上有所不同,可以用于解决不同的问题。然而,在某些情况下,它们都可以解决相同的问题(尽管成本不同),这可能是为什么许多人混淆这两个概念的原因。
RxJava 在概念上类似于 Android LiveData,后者不久前发布,为了更好地理解这些概念以及事件总线,我建议您阅读我的文章。在文章中,我介绍了应该在哪些情况下使用其中之一以及使用其中一个而不是另一个的利弊。我认为这可能对您有用: