Petite astuce comment utiliser la bibliothèque EventBus

Ce que vous allez créer

Construire une application Android comportant plusieurs composants actifs communiquant entre eux peut s'avérer fastidieux. Pour gagner du temps, les développeurs se retrouvent souvent avec des composants étroitement couplés dans leurs applications. EventBus est une bibliothèque open source populaire qui a été créée pour résoudre ce problème en utilisant le éditeur / abonné modèle.

À l'aide de la bibliothèque EventBus, vous pouvez transmettre des messages d'une classe à une ou plusieurs classes en quelques lignes de code. De plus, toutes les classes impliquées sont complètement découplées les unes des autres, conduisant à un code moins complexe, plus facile à gérer et à déboguer..

Dans cette astuce, vous allez apprendre à utiliser la bibliothèque EventBus en créant une application Android simple qui affiche l'état de charge du périphérique. Étant donné que les modifications de l'état de charge sont des événements du système, l'application aura un Activité qui a besoin de recevoir des informations d'un BroadcastReceiver-le scénario parfait pour utiliser un bus d'événement.

Conditions préalables

Assurez-vous que l’ensemble Eclipse ADT est configuré. Vous pouvez le télécharger depuis le site Web Android Developer..

1. Créer un nouveau projet

Lancez Eclipse et créez une nouvelle application Android. Nommez l'application EventBusSample. Choisissez un nom de package unique et définissez le SDK minimum requis à Android 2.2 et le SDK cible à Android 4.4.

Nous allons créer le Activité nous-mêmes, alors désélectionnez Créer une activité et cliquez terminer.

2. Modifier le manifeste

Cette application a un BroadcastReceiver qui répond aux actions suivantes:

  • android.intent.action.ACTION_POWER_CONNECTED
  • android.intent.action.ACTION_POWER_DISCONNECTED

Nomme le BroadcastReceiver ChargingReceiver et le déclarer dans le AndroidManifest.xml fichier.

     

L'application en a un Activité pour afficher l'état de charge. Nomme le DisplayActivity et le déclarer comme indiqué ci-dessous.

     

3. Ajouter une bibliothèque EventBus

Téléchargez la dernière version de la bibliothèque EventBus sous forme de fichier JAR de Maven Central et ajoutez le fichier JAR dans le projet. libs annuaire.

4. Créer ChargingEvent Classe

Les événements sur le bus d’événements ne sont rien d’autre que des objets contenant les informations à communiquer. Laisser ChargingEvent soit le nom de la classe qui contient les informations transmises par le BroadcastReceiver au Activité. Ceci est une classe simple qui a seulement un Chaîne pour représenter l'information. Il a également un constructeur pour définir la valeur de la chaîne et un accesseur pour obtenir sa valeur.

Créer un nouveau fichier nommé ChargingEvent.java et ajoutez-y le code suivant:

package com.hathy.eventbussample; Classe publique ChargingEvent private String data; public ChargingEvent (chaîne de données) this.data = data;  public String getData () return data; 

5. Créer BroadcastReceiver Classe

Créer une nouvelle classe nommée ChargingReceiver qui s'étend BroadcastReceiver. Cette classe utilise le bus d'événements pour publier des messages. Il a une variable nommée autobus, qui fait référence au bus créé par la bibliothèque EventBus. Le bus est un singleton et vous devez utiliser le getDefault méthode pour s'y référer.

dans le onReceive méthode, nous créons une nouvelle instance du ChargingEvent classe et ajouter notre message à elle. Voici un exemple de message:

@ 14: 23: 20 cet appareil a commencé à se charger.

Pour générer ce message, nous devons procéder comme suit:

  • Utilisez les méthodes disponibles dans le Temps classe pour définir l'heure à laquelle l'événement s'est produit.
  • Ajoutez la chaîne "cet appareil a commencé à charger | décharger" en fonction de l'action reçue. Si l'action reçue est Intention.ACTION_POWER_CONNECTED, l'appareil est en cours de chargement. Si c'est Intention.ACTION_POWER_DISCONNECTED, l'appareil se décharge.

Une fois la ChargingEvent Si l'objet a la bonne information, il est publié sur le bus de l'événement à l'aide du poster méthode. La mise en œuvre de la ChargingReceiver La classe devrait maintenant ressembler à ceci:

package com.hathy.eventbussample; importer de.greenrobot.event.EventBus; importer android.content.BroadcastReceiver; importer android.content.Context; importer android.content.Intent; importer android.text.format.Time; Classe publique ChargingReceiver étend BroadcastReceiver bus EventBus privé = EventBus.getDefault (); @Override public void onReceive (contexte de contexte, intention d'intention) ChargingEvent event = null; // Obtenir l'heure actuelle Time now = new Time (); maintenant.setToNow (); String timeOfEvent = now.format ("% H:% M:% S"); String eventData = "@" + timeOfEvent + "ce périphérique a démarré"; if (intent.getAction (). equals (Intent.ACTION_POWER_CONNECTED)) événement = new ChargingEvent (eventData + "charge.");  else if (intent.getAction (). equals (Intent.ACTION_POWER_DISCONNECTED)) event = new ChargingEvent (eventData + "décharging.");  // Publier l'événement bus.post (event);  

Comme vous pouvez le constater, la publication de messages sur le bus d'événements ne nécessite qu'une seule ligne de code. De plus, l'éditeur n'a pas besoin de savoir quoi que ce soit sur le ou les abonnés..

6. Créer DisplayActivity Classe

Créer une nouvelle classe nommée DisplayActivity. Cette classe est responsable de l’affichage des messages des événements publiés sur le bus d’événements..

Cette classe a aussi une variable qui référence le bus d’événements. Comme la bibliothèque EventBus suit le modèle singleton, l’instance du bus d’événements disponible pour ce Activité est la même que l'instance disponible pour le BroadcastReceiver.

Pour permettre à une classe de s'abonner à des événements sur le bus, le registre La méthode est invoquée. Dans notre Activité, nous l'appelons dans le onCreate méthode.

De même, pour cesser de recevoir des événements, le se désinscrire La méthode est invoquée. Nous appelons cette méthode dans le onDestroy méthode pour s'assurer que toutes les ressources sont libérées.

le Activité a une mise en page très basique, contenant seulement un Affichage qui affiche les messages. Il n'est donc pas nécessaire de créer une mise en page pour cela. Nous utilisons simplement le Affichage comme la vue du contenu de la Activité.

À ce stade, la mise en œuvre de la DisplayActivity la classe devrait ressembler à ceci:

package com.hathy.eventbussample; importer android.app.Activity; importer android.os.Bundle; importer android.widget.TextView; importer de.greenrobot.event.EventBus; La classe publique DisplayActivity étend Activity private EventBus bus = EventBus.getDefault (); vue TextView privée; @Override protected void onCreate (Bundle savedInstanceState) super.onCreate (savedInstanceState); view = new TextView (this); view.setTextSize (20f); view.setPadding (20, 20, 20, 20); view.setText ("En attente d'événements ..."); setContentView (vue); // S'inscrire en tant qu'abonné bus.register (this);  @Override protected void onDestroy () // Annule l'enregistrement de bus.unregister (this); super.onDestroy (); 

Chaque classe qui souhaite recevoir des événements du bus d’événements doit contenir un onEvent méthode. Le nom de cette méthode est important car la bibliothèque EventBus utilise le API Java Reflection pour accéder à cette méthode. Il a un seul paramètre qui fait référence à l'événement. Dans notre cas, le paramètre va être de type ChargingEvent.

Tout ce que nous faisons dans cette méthode est d’ajouter le dernier message reçu au contenu de la Affichage. La mise en œuvre de la onEvent méthode ressemble à ceci:

public void onEvent (événement ChargingEvent) view.setText (view.getText () + "\ n" + event.getData ()); 

7. Exécuter et tester

L'application est maintenant prête à être testée. Compilez-le et exécutez-le sur un périphérique Android physique. Une fois l'application lancée, branchez et débranchez le cordon d'alimentation plusieurs fois pour voir l'état de charge changer..

Conclusion

Dans ce tutoriel, vous avez appris à utiliser la bibliothèque EventBus et à quel point elle simplifie la communication entre les classes. La bibliothèque est optimisée pour la plate-forme Android et est très légère. Cela signifie que vous pouvez l'utiliser dans vos projets sans vous soucier de la taille de votre application. Pour en savoir plus sur la bibliothèque EventBus, visitez le projet sur GitHub..