我對Android中EventBus和RxJava的區別感到困惑。我需要實現其中的一個功能,以便在完成某些更改時通知某些組件,以便它們可以更新其狀態。
另外,我讀了EventsBus已經不再使用RxJava了,我不知道這些信息是否正確。EventBus和RxJava有什麼區別?
回答
EventBus
和RxJava
它們的性質是不同的。
EventBus
只是一個bus
顧名思義 - 它提供了訂閱和發佈事件到「公共汽車」的機制,而不必關心接線是如何完成的,這個「總線」實際上是什麼等。 Android的上下文,EventBus
只是一個更簡單的方式來處理與較少的樣板發送和接收Broadcast
消息。
RxJava
另一方面比那更強大。是的,你可以訂閱和發佈事件,但是你對這個過程有更多的控制 - 頻率,在哪個線程上發生,等等。RxJava
的主要功能(在我看來)是你可以很容易地操作發佈的數據,使用它的一些噸的operators
。總結 - 如果你只關心發佈某些事件並在收到時執行一些操作 - 你最好使用兩者中最簡單的一種,即某種Bus
,或者甚至是普通的舊BroadcastReceiver
s。如果您還將受益於轉換數據,處理線程或簡化錯誤處理 - 請參閱RxJava
方法。請記住RxJava
通常有一個陡峭的學習曲線,所以它需要一段時間才能習慣它的概念。
感謝您的回答。使用EventBus的缺點是什麼?與RxJava相比,它有限嗎? – HiddenDroid
@HiddenDroid是的,你可以繼續使用EventBus,但在我看來,RxJava對運營商有很多好處。 RxJava越來越流行(實際上不只是RxJava,一般的被動編程),你會發現很多庫將它包含在他們的API中(例如Retrofit)。一方面說明,一旦習慣使用它真的很方便。 – mewa
@HiddenDroid:想不出任何'EventBus'的具體缺點 - 它總是歸結爲你的任務。正如我在答覆中所說的 - 如果您只需要發送一些/回覆某些事件,巴士就能完美地完成這項工作。如果你的任務比這更復雜 - 也許值得探索其他解決方案。訣竅在於找到適合該任務的正確工具,因此如果您需要的只是1-2個BroadcastReceivers,則無需將自己推向RxJava ... – Vesko
- 1. RxJava和GreenRobot EventBus
- 2. Greenbot Eventbus 3.0:onEvent,onEventMainThread,onEventBackgroundThread和onEventAsync有什麼區別?
- 3. rxjava 2.0 Observable.subscribe和Observable.subscribeActual之間有什麼區別?
- 4. RxJava 2可取消和一次性使用有什麼區別?
- 5. rxJava 1:fromCallable和defer之間有什麼區別?
- 6. 什麼EventStream和EventBus
- 7. 有什麼區別`和$(Bash中有什麼區別?
- 8. 有什麼區別? :和||
- 9. &&和||有什麼區別?
- 10. 「/」和「/ *」有什麼區別?
- 11. 有什麼區別:。!和:r!?
- 12. ==和===有什麼區別?
- 13. Appender和〜有什麼區別?
- 14. $ @和$ *有什麼區別?
- 15. is和=有什麼區別?
- 16. #.00和#。##有什麼區別?
- 17. `==`和`is`有什麼區別?
- 18. '=='和'==='有什麼區別?
- 19. /和/#/有什麼區別?
- 20. | 0和~~有什麼區別?
- 21. `&`和`ref`有什麼區別?
- 22. ==和===有什麼區別?
- 23. ==和===有什麼區別?
- 24. `{}`和`[]`有什麼區別?
- 25. JavaScript和=== ===有什麼區別?
- 26. difftime和' - '有什麼區別?
- 27. =和==有什麼區別?
- 28. 中央EventBus和Backbone.Radio之間的區別?
- 29. RxJava和Kotlin的花括號和正常括號有什麼區別
- 30. xtype和別名有什麼區別?
據我所知,他們的服務略有不同,但基本上,RxJava可以做得比EventBus更多 –
[Android Pros&Cons:Event Bus和RxJava]的可能重複(http://stackoverflow.com/問題/ 30147877/android-pros-cons-event-bus-and-rxjava) –
Otto已棄用,但GreenRobot不是。 http://greenrobot.org/eventbus/ – Kuffs