web-dev-qa-db-fra.com

Otto vs localBroadcast:

Je suis un énorme fan de cotisations de Source Open Source Square a fait au Android communauté et examinait leur dernière contribution Otto (bus d'événement)

http://square.github.io/otto/

Creusez plus profondément, je vois que Otto utilise la réflexion et il n'y a pas de diffusion ordonnée (un motif où un message inconnu est transmis d'un récepteur au prochain récepteur à l'écoute du même type d'événement) Otto croit en plus d'un feu d'incendie et d'oublier.

Maintenant Android a LocalBroadcastManager (LBM) dans sa bibliothèque de support V4 qui sert le même objectif, bien qu'il soit plus en vigueur et a plus de restrictions sur les objets qui sont passés. Mais sur le Un côté plus lumineux, il prend en charge la diffusion ordonnée et sa plus semblable à la diffusion normale.

Les deux Otto et LBM sont dans le même espace de processus pour en termes de vitesse, je suppose que les deux seraient même. La seule vraie différence que je pouvais voir est que Otto vous permet de définir des événements personnalisés et que vous n'avez pas à sérialiser/coller les objets.

D'où ma vraie question est quand utiliseriez-vous Otto si LBM fait les mêmes choses.

Les références :

http://nick.perfected.com/otto-event-system/

tiliser des intentions ou un bus d'événement pour communiquer dans la même application

https://plus.google.com/107049228697365395345/posts/6j4Anwngcuy

44
Chris

Mais du côté plus lumineux, il supporte une diffusion ordonnée

Pas vraiment. Il n'y a pas sendOrderedBroadcast() sur LocalBroadcastManager et la priorité sur le IntentFilter ne semble pas être utilisé. Si vous voulez dire "les émissions seront livrées dans l'ordre que j'ai enregistré les récepteurs", ce qui pourrait être le comportement actuel, mais rien ne garantit qu'il restera de cette façon.

Otto et LBM sont dans le même espace de processus, donc en termes de vitesse, je suppose que les deux seraient les mêmes

Ils seraient similaires, bien que probablement pas identiques.

D'où ma vraie question est quand utiliseriez-vous Otto si LBM fait les mêmes choses

Comparaison de ces deux, Otto a une API plus propre, IMHO.

Personnellement, j'utiliserais Eventbus de Greenrobot sur l'un ou l'autre de ceux-ci, car il offre des modèles de filetage plus flexibles.

38
CommonsWare

Otto et LBM sont dans le même espace de processus, donc en termes de vitesse, je suppose que les deux seraient les mêmes.

J'ai découvert que l'enregistrement des événements Otto est assez coûteux, il faut parfois plus de 16 millisecondes pour enregistrer les abonnés d'événements (cela signifie que vous déposez 1 FPS!). C'est quelque peu attendu, comme l'abonnement à l'événement à Otto se fait par réflexion. Bien que pour LBM, cela ne prend que quelques centaines de μs que pour l'enregistrement, qui est presque 32 fois plus rapide. (Résultat de TrackView, Samsung Galaxy S4)

Mais bien sûr, utiliser Otto peut écrire moins de code, il y a un compromis.

5
am5a03