web-dev-qa-db-fra.com

Quelle est la différence entre EventBus et RxJava?

Je suis confus quant à la différence entre EventBus et RxJava dans Android. J'ai besoin d'implémenter l'un d'eux pour mon problème de notification de certains composants lorsque certaines modifications ont été apportées, afin qu'ils puissent mettre à jour leur état.
J'ai également lu que EventsBus est devenu obsolète sur RxJava et je ne sais pas si cette information est vraie ou non.

49
HiddenDroid

EventBus et RxJava sont de nature différente.

EventBus est juste un bus comme son nom l'indique - il fournit le mécanisme pour souscrire et publier des événements sur le "bus", sans que vous vous souciez de la façon dont le câblage est fait, de ce que ce "bus" fait est, etc. Dans le contexte d'Android, le EventBus est juste un moyen plus simple de gérer l'envoi et la réception de messages Broadcast avec moins de passe-partout.

RxJava d'autre part est beaucoup plus puissant que cela. Oui, vous pouvez vous abonner et publier des événements, mais vous avez bien plus de contrôle sur le processus - la fréquence, sur quel thread tout se passe, etc. Le pouvoir principal de RxJava (à mon avis) est que vous pouvez manipuler le les données étant publiées très facilement, en utilisant certaines de ses tonnes de operators.

Pour résumer - si vous ne vous souciez que de publier certains événements et d'exécuter certaines actions une fois reçus - vous feriez probablement mieux d'utiliser le plus simple des deux, à savoir une sorte de Bus, ou même simplement vieux BroadcastReceivers. Si vous bénéficierez également de la transformation des données, de la gestion du threading ou de la gestion simplifiée des erreurs, optez pour l'approche RxJava. Gardez à l'esprit que RxJava a généralement une courbe d'apprentissage abrupte, il faut donc un certain temps pour s'habituer à son concept.

99
Vesko

Pour comprendre RxJava, pensez à une liste. Aujourd'hui, la manipulation d'une liste comme la transformation, le fractionnement, la fusion peut se faire facilement en utilisant des méthodes fonctionnelles (map, groupBy, etc.). RxJava utilise les mêmes principes, sauf que sa cible principale n'est pas la liste mais le flux. Le flux est asynchrone, souvent des données en direct telles que la chaîne Web ou le film en ligne.

Bus d'événements vient des besoins de découpler les classes qui dans Android sont souvent liées au cycle de vie. Le couplage étroit du rappel réseau et des vues d'activité en tant qu'instance, a été un cause de nombreuses exceptions de pointeur nul. Le bus d'événements avec son modèle éditeur-abonné atténue ce problème.

Comment se mélange-t-il avec RxJava? Pour commencer, RxJava intègre un motif observable. Ici, un observateur regarde un observable et réagit lorsqu'un événement arrive. Observable a plusieurs sous-classes, parmi lesquelles Sujet qui a les propriétés d'Observable et d'Observer. Puisqu'il fonctionne en piégeant un événement et en le publiant aux abonnés, il fonctionne techniquement comme bus d'événements.

Est-il sage d'utiliser RxJava comme bus d'événements? Non. RxJava introduirait des complexités inutiles à des fins plus simples. Utilisez-le uniquement si l'application manipule des flux. Par exemple, couplage d'images d'un flux de film et de sous-titres d'un autre flux. Si l'application consomme simplement une API REST et a besoin de dissocier le rappel des activités/fragments, le bus d'événements suffit.

4
inmyth

Live @Vesko a écrit, RxJava et le bus d'événements diffèrent par leur nature et peuvent servir à résoudre différents problèmes. Néanmoins, il existe certains scénarios dans lesquels les deux peuvent résoudre le même problème (bien qu'à des coûts différents), et cela pourrait être la raison pour laquelle beaucoup de gens confondent ces deux concepts.

RxJava est conceptuellement similaire à Android LiveData qui a été publié il n'y a pas si longtemps, et pour mieux comprendre ces concepts, ainsi que le bus d'événements, je vous suggère de lire mon article. Dans l'article, je passe en revue ces mêmes concepts, décrivant les scénarios dans lesquels nous devrions utiliser les uns sur les autres et les avantages et les inconvénients de l’utilisation de l’un plutôt que de l’autre. Je pense que cela peut vous être utile:

Quand et pourquoi utiliser LiveData

0
TheCodeFather

Si vous souhaitez récupérer les données du serveur et mettre à jour l'interface utilisateur, utilisez RxJava + Refrofit. Si vous mettez à jour l'interface utilisateur ou effectuez une opération sans récupérer de données, EventBus suffit.

0
Raul Yang