Was ist der Unterschied zwischen EventBus und RxJava? [duplicate]

Lesezeit: 6 Minuten

Benutzer-Avatar
Versteckter Droide

Ich bin verwirrt über den Unterschied zwischen EventBus und RxJava in Android. Ich muss eine davon 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 Informationen wahr sind oder nicht.

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

    – OneCricketeer

    28. Februar 2016 um 17:10 Uhr

  • Otto ist veraltet, GreenRobot jedoch nicht. greenrobot.org/eventbus

    – Kuffs

    28. Februar 2016 um 17:22 Uhr

  • Ich habe dafür gestimmt, diese Frage erneut zu öffnen, da die verlinkte doppelte Frage keine so wertvollen Antworten hat wie die hier (die einzige dort gepostete Antwort befasst sich nur mit RxJava).

    –Daniel F

    20. Dezember 2019 um 13:38 Uhr


  • @DanielF hast du den anderen auch als Dupe VTC?

    – Tiago Martins Peres

    9. Januar 2020 um 14:28 Uhr

  • @TiagoMartinsPeres – Nein, habe ich nicht. Ich würde, wenn dieser wiedereröffnet wird.

    –Daniel F

    9. Januar 2020 um 15:59 Uhr

Benutzer-Avatar
Vesko

EventBus und RxJava unterscheiden sich in ihrer Natur.

EventBus ist nur ein bus Wie der Name schon sagt, bietet es den Mechanismus zum Abonnieren und Veröffentlichen von Ereignissen für den “Bus”, ohne dass Sie sich darum kümmern müssen, wie die Verkabelung erfolgt, was dieser “Bus” tatsächlich ist usw. Im Kontext von Android ist das EventBus ist nur eine einfachere Möglichkeit, mit dem Senden und Empfangen umzugehen Broadcast Nachrichten mit weniger Textbausteinen.

RxJava auf der anderen Seite ist viel viel mächtiger als das. Ja, Sie können Ereignisse abonnieren und veröffentlichen, aber Sie haben viel mehr Kontrolle über den Prozess – Häufigkeit, auf welchem ​​​​Thread alles passiert usw. Die Hauptleistung von RxJava (meiner Meinung nach) ist, dass Sie die veröffentlichten Daten sehr einfach manipulieren können, indem Sie einige ihrer Tonnen verwenden operators.

Zusammenfassend lässt sich sagen, dass Sie, wenn Sie nur einige Ereignisse veröffentlichen und einige Aktionen ausführen möchten, wenn sie empfangen werden, wahrscheinlich besser dran sind, das einfachste der beiden zu verwenden, nämlich eine Art von Busoder sogar einfach alt BroadcastReceivers. Wenn Sie auch von der Transformation der Daten, dem Threading oder der vereinfachten Fehlerbehandlung profitieren, entscheiden Sie sich für die RxJava sich nähern. Denken Sie daran RxJava hat im Allgemeinen eine steile Lernkurve, sodass es einige Zeit dauert, sich an das Konzept zu gewöhnen.

  • Danke für deine Antwort. Welche Nachteile hat die Verwendung von EventBus? ist es im Vergleich zu RxJava eingeschränkt?

    – Versteckter Droid

    29. Februar 2016 um 11:34 Uhr


  • @HiddenDroid Ja, das ist es; Sie könnten einfach mit EventBus weitermachen, aber meiner Meinung nach hat RxJava mit seinen Betreibern viel zu bieten. RxJava wird immer beliebter (eigentlich nicht nur RxJava, reaktive Programmierung im Allgemeinen) und Sie werden feststellen, dass viele Bibliotheken es in ihre APIs aufnehmen (z. B. Retrofit). Nebenbei bemerkt, es ist wirklich praktisch, es zu benutzen, sobald man sich daran gewöhnt hat.

    – mewa

    29. Februar 2016 um 22:49 Uhr


  • @HiddenDroid: Kann mir keine spezifischen Nachteile von vorstellen EventBus– es kommt immer darauf an, was Ihre Aufgabe ist. Wie ich in meiner Antwort sagte – wenn Sie nur einige Ereignisse senden / auf einige Ereignisse antworten müssen – wird der Bus die Arbeit perfekt erledigen. Wenn Ihre Aufgabe komplizierter ist, lohnt es sich vielleicht, nach anderen Lösungen zu suchen. Der Trick besteht darin, das richtige Tool für die Aufgabe zu finden, sodass Sie sich nicht in RxJava drängen müssen, wenn Sie nur 1-2 BroadcastReceiver benötigen …

    – Vesko

    29. Februar 2016 um 22:52 Uhr


  • @Vesko Vielen Dank für Ihre Antwort. Ich kann von Ihnen verstehen, dass EventBus nicht empfohlen wird, wenn die Aufgabe komplizierter ist. Was ich wirklich verstehen möchte, ist, was ist der negative Faktor in der EventBus-Architektur, damit es mit komplizierten Aufgaben nicht funktioniert?

    – Versteckter Droid

    29. Februar 2016 um 23:46 Uhr

  • @HiddenDroid, es ist nicht so, dass EventBus nicht empfohlen wird – es hängt alles von der jeweiligen Aufgabe ab. Beide zu vergleichen ist wie Orangen mit Äpfeln zu vergleichen – sie haben unterschiedliche Zwecke. Die kraft von RxJava ist in seinen Operatoren – überprüfen Sie sie hier: reaktivesx.io/documentation/operators.html. Wie Sie sehen können, können Sie ganz einfach transformieren, filtern, verketten, puffern, Fehler behandeln und so viele andere Dinge tun.

    – Vesko

    1. März 2016 um 8:42 Uhr

Benutzer-Avatar
im Mythos

Verstehen RxJava, denken Sie an eine Liste. Heutzutage kann das Manipulieren einer Liste wie Transformieren, Aufteilen, Zusammenführen einfach mit funktionalen Methoden (map, groupBy usw.) durchgeführt werden. RxJava verwendet die gleichen Prinzipien, außer dass sein Hauptziel nicht die Liste, sondern der Stream ist. Stream ist asynchron, oft Live-Daten wie Websocket-Kanal oder Online-Film.

Event-Bus ergibt sich aus der Notwendigkeit, Klassen zu entkoppeln, die in Android oft an den Lebenszyklus gebunden sind. Die enge Kopplung von Netzwerk-Callback und Aktivitätsansichten als Instanz war eine Ursache für zahlreiche Nullzeiger-Ausnahmen. Event Bus mit seinem Publisher-Subscriber-Muster mindert dieses Problem.

Wie wird es mit RxJava gemischt? Zu Beginn enthält RxJava ein beobachtbares Muster. Hier beobachtet ein Beobachter ein Observable und reagiert, wenn ein Ereignis eintritt. Observable hat mehrere Unterklassen, darunter Subject, das die Eigenschaften von Observable und Observer hat. Da es funktioniert, indem ein Ereignis abgefangen und an Abonnenten veröffentlicht wird, fungiert es technisch gesehen als Ereignisbus.

Ist es ratsam, RxJava als Ereignisbus zu verwenden? Nein. RxJava würde unnötige Komplexitäten für einfachere Zwecke einführen. Verwenden Sie es nur, wenn die App Streams manipuliert. Zum Beispiel das Koppeln von Frames aus einem Filmstream und Untertiteln aus einem anderen Stream. Wenn die App einfach eine REST-API verwendet und den Rückruf von Aktivitäten/Fragmenten entkoppeln muss, reicht der Ereignisbus aus.

Benutzer-Avatar
Der CodeVater

Live @Vesko schrieb, RxJava und Event Bus unterscheiden sich in ihrer Natur und können dazu dienen, unterschiedliche Probleme zu lösen. Dennoch gibt es einige Szenarien, in denen beide dasselbe Problem lösen können (wenn auch zu unterschiedlichen Kosten), und dies könnte der Grund sein, warum viele Menschen diese beiden Konzepte verwechseln.

RxJava ähnelt konzeptionell Android LiveData, das vor nicht allzu langer Zeit veröffentlicht wurde, und um diese Konzepte sowie den Ereignisbus besser zu verstehen, schlage ich vor, dass Sie meinen Beitrag lesen. In diesem Beitrag gehe ich genau auf diese Konzepte ein und beschreibe die Szenarien, in denen wir eines über dem anderen verwenden sollten, sowie die Vor- und Nachteile der Verwendung des einen statt des anderen. Ich denke, es könnte für Sie nützlich sein:

Wann und warum Sie LiveData verwenden sollten

Wenn Sie Daten vom Server abrufen und die Benutzeroberfläche aktualisieren möchten, verwenden Sie RxJava + Refrofit. Wenn Sie die Benutzeroberfläche aktualisieren oder einen Vorgang ausführen, ohne Daten abzurufen, reicht EventBus aus.

1180270cookie-checkWas ist der Unterschied zwischen EventBus und RxJava? [duplicate]

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy