2016-02-28 7 views
25

Ich bin verwirrt über den Unterschied zwischen EventBus und RxJava in Android. Ich muss eines von ihnen für mein Problem implementieren, einige Komponenten zu benachrichtigen, wenn einige Änderungen vorgenommen wurden, damit sie ihren Status aktualisieren können.
Außerdem habe ich gelesen, dass EventsBus über RxJava veraltet ist und ich weiß nicht, ob diese Information wahr ist oder nicht.Was ist der Unterschied zwischen EventBus und RxJava?

+2

Soweit ich weiß, dienen sie etwas anderen Zwecken, aber im Grunde kann RxJava viel mehr als EventBus –

+2

Mögliche Duplikate von [Android Pros & Contras: Event Bus und RxJava] (http://stackoverflow.com/ Fragen/30147877/android-pros-cons-event-bus-und-rxjava) –

+5

Otto ist veraltet, aber GreenRobot ist nicht. http://greenrobot.org/eventbus/ – Kuffs

Antwort

71

EventBus und RxJava sind in ihrer Natur unterschiedlich.

EventBus ist nur ein bus, wie der Name schon sagt - es bietet den Mechanismus zum abonnieren und veröffentlichen Ereignisse auf den "Bus", ohne dass Sie kümmern, wie die Verkabelung erfolgt, was dieser "Bus" ist, etc. In der Kontext von Android, die EventBus ist nur eine einfachere Möglichkeit, mit dem Senden und Empfangen von Broadcast Nachrichten mit weniger Standard zu behandeln.

RxJava auf der anderen Seite ist viel viel stärker als das. Ja, Sie können Ereignisse abonnieren und veröffentlichen, aber Sie haben viel mehr Kontrolle über den Prozess - Häufigkeit, auf welcher Thread alles passiert, etc. Die Hauptstrom von RxJava (meiner Meinung nach) ist, dass Sie die Daten, die veröffentlicht werden, sehr einfach manipulieren können mit einigen Tonnen operators.

Zusammenfassend - wenn Sie nur einige Ereignisse veröffentlichen möchten und einige Aktionen ausführen, wenn Sie empfangen - würden Sie wahrscheinlich besser die einfachste der beiden verwenden, nämlich eine Art von Bus, oder sogar einfach alt BroadcastReceiver s. Wenn Sie auch von der Transformation der Daten, dem Umgang mit Threading oder der vereinfachten Fehlerbehandlung profitieren, wählen Sie den Ansatz RxJava. Denken Sie daran, dass RxJava generell eine steile Lernkurve hat, so dass es einige Zeit braucht, um sich an sein Konzept zu gewöhnen.

+0

Vielen Dank für Ihre Antwort. Was sind die Nachteile von EventBus? ist es im Vergleich zu RxJava begrenzt? – HiddenDroid

+2

@HiddenDroid Ja ist es; Sie könnten einfach mit EventBus fortfahren, aber meiner Meinung nach hat RxJava viel zu bieten mit seinen Betreibern. RxJava gewinnt an Popularität (eigentlich nicht nur RxJava, reaktive Programmierung im Allgemeinen) und Sie werden feststellen, dass viele Bibliotheken es in ihre APIs aufnehmen (zum Beispiel Retrofit). Nebenbei bemerkt, es ist wirklich praktisch, es zu benutzen, sobald man sich daran gewöhnt hat. – mewa

+2

@HiddenDroid: Ich kann mir keine spezifischen Nachteile von 'EventBus' vorstellen - es kommt immer darauf an, was Ihre Aufgabe ist. Wie ich in meiner Antwort gesagt habe - wenn Sie nur einige Ereignisse senden/beantworten müssen - der Bus wird die Arbeit perfekt machen. Wenn Ihre Aufgabe komplizierter ist - vielleicht lohnt es sich, andere Lösungen zu erforschen. Der Trick ist, das richtige Werkzeug für die Aufgabe zu finden, also brauchen Sie sich nicht in RxJava zu drängen, wenn Sie nur 1-2 BroadcastReceiver brauchen ... – Vesko