2016-02-28 25 views
25

我對Android中EventBus和RxJava的區別感到困惑。我需要實現其中的一個功能,以便在完成某些更改時通知某些組件,以便它們可以更新其狀態。
另外,我讀了EventsBus已經不再使用RxJava了,我不知道這些信息是否正確。EventBus和RxJava有什麼區別?

+2

據我所知,他們的服務略有不同,但基本上,RxJava可以做得比EventBus更多 –

+2

[Android Pros&Cons:Event Bus和RxJava]的可能重複(http://stackoverflow.com/問題/ 30147877/android-pros-cons-event-bus-and-rxjava) –

+5

Otto已棄用,但GreenRobot不是。 http://greenrobot.org/eventbus/ – Kuffs

回答

71

EventBusRxJava它們的性質是不同的。

EventBus只是一個bus顧名思義 - 它提供了訂閱和發佈事件到「公共汽車」的機制,而不必關心接線是如何完成的,這個「總線」實際上是什麼等。 Android的上下文,EventBus只是一個更簡單的方式來處理與較少的樣板發送和接收Broadcast消息。

RxJava另一方面比那更強大。是的,你可以訂閱和發佈事件,但是你對這個過程有更多的控制 - 頻率,在哪個線程上發生,等等。RxJava的主要功能(在我看來)是你可以很容易地操作發佈的數據,使用它的一些噸的operators。總結 - 如果你只關心發佈某些事件並在收到時執行一些操作 - 你最好使用兩者中最簡單的一種,即某種Bus,或者甚至是普通的舊BroadcastReceiver s。如果您還將受益於轉換數據,處理線程或簡化錯誤處理 - 請參閱RxJava方法。請記住RxJava通常有一個陡峭的學習曲線,所以它需要一段時間才能習慣它的概念。

+0

感謝您的回答。使用EventBus的缺點是什麼?與RxJava相比,它有限嗎? – HiddenDroid

+2

@HiddenDroid是的,你可以繼續使用EventBus,但在我看來,RxJava對運營商有很多好處。 RxJava越來越流行(實際上不只是RxJava,一般的被動編程),你會發現很多庫將它包含在他們的API中(例如Retrofit)。一方面說明,一旦習慣使用它真的很方便。 – mewa

+2

@HiddenDroid:想不出任何'EventBus'的具體缺點 - 它總是歸結爲你的任務。正如我在答覆中所說的 - 如果您只需要發送一些/回覆某些事件,巴士就能完美地完成這項工作。如果你的任務比這更復雜 - 也許值得探索其他解決方案。訣竅在於找到適合該任務的正確工具,因此如果您需要的只是1-2個BroadcastReceivers,則無需將自己推向RxJava ... – Vesko