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.
Assurez-vous que l’ensemble Eclipse ADT est configuré. Vous pouvez le télécharger depuis le site Web Android Developer..
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.
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.
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.
ChargingEvent
ClasseLes é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;
BroadcastReceiver
ClasseCré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:
Temps
classe pour définir l'heure à laquelle l'événement s'est produit.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..
DisplayActivity
ClasseCré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 ());
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..
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..