Créer une application Android comportant plusieurs composants actifs communiquant entre eux peut devenir 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.
En utilisant la bibliothèque EventBus, vous pouvez transmettre des messages d’une classe à une ou plusieurs classes en seulement 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 et plus facile à maintenir et à déboguer.
Dans cette astuce rapide, vous allez apprendre à utiliser la bibliothèque EventBus en créant une application Android simple qui affiche l’état de charge de l’appareil. Étant donné que les changements dans l’état de charge sont des événements système, l’application va avoir un Activity qui a besoin de recevoir des informations d’un BroadcastReceiver—Le scénario idéal pour utiliser un bus d’événements.
Conditions préalables
Assurez-vous que le bundle Eclipse ADT est configuré. Vous pouvez le télécharger depuis le Site Web des développeurs Android.
1. Créer un nouveau projet
Démarrez 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 Activity nous-mêmes, alors désélectionnez Créer une activité et cliquez terminer.

2. Modifier le manifeste
Cette application en a un BroadcastReceiver qui répond aux actions suivantes:
android.intent.action.ACTION_POWER_CONNECTEDandroid.intent.action.ACTION_POWER_DISCONNECTED
Nomme le BroadcastReceiver ChargingReceiver et déclarez-le dans le AndroidManifest.xml fichier.
<receiver android:name=".ChargingReceiver">
<intent-filter>
<action android:name="android.intent.action.ACTION_POWER_CONNECTED" />
<action android:name="android.intent.action.ACTION_POWER_DISCONNECTED" />
</intent-filter>
</receiver>
L’application en a un Activity pour afficher l’état de charge. Nomme le DisplayActivity et déclarez-le comme indiqué ci-dessous.
<activity android:name=".DisplayActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
3. Ajouter une bibliothèque EventBus
Téléchargez la dernière version de la bibliothèque EventBus en tant que JAR à partir de Maven Central et ajoutez le JAR dans votre projet libs annuaire.
4. Créer ChargingEvent Classe
ChargingEvent ClasseLes événements sur le bus d’événements ne sont que des objets contenant les informations qui doivent être communiquées. Laisser ChargingEvent être le nom de la classe qui contient les informations transmises par le BroadcastReceiver à la Activity. Il s’agit d’une classe simple qui n’a qu’un String 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éez un nouveau fichier nommé ChargingEvent.java et ajoutez-y le code suivant:
package com.hathy.eventbussample;
public class ChargingEvent {
private String data;
public ChargingEvent(String data){
this.data = data;
}
public String getData(){
return data;
}
}
5. Créer BroadcastReceiver Classe
BroadcastReceiver ClasseCréez 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 bus, 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 de la ChargingEvent classe et ajoutez-y notre message. Voici un exemple de message:
@14:23:20 this device started charging.
Pour générer ce message, nous devons procéder comme suit:
- Utilisez les méthodes disponibles dans le
Timeclass pour définir l’heure à laquelle l’événement s’est produit. - Ajoutez la chaîne « cet appareil a commencé à charger | déchargement » en fonction de l’action reçue. Si l’action reçue est
Intent.ACTION_POWER_CONNECTED, l’appareil est en cours de chargement. Si c’est
Intent.ACTION_POWER_DISCONNECTED, l’appareil se décharge.
Une fois la ChargingEvent l’objet a les bonnes informations, il est publié sur le bus d’événements à l’aide du post méthode. La mise en œuvre du ChargingReceiver la classe devrait maintenant ressembler à ceci:
package com.hathy.eventbussample;
import de.greenrobot.event.EventBus;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.text.format.Time;
public class ChargingReceiver extends BroadcastReceiver {
private EventBus bus = EventBus.getDefault();
@Override
public void onReceive(Context context, Intent intent) {
ChargingEvent event = null;
// Get current time
Time now = new Time();
now.setToNow();
String timeOfEvent = now.format("%H:%M:%S");
String eventData = "@" + timeOfEvent + " this device started ";
if(intent.getAction().equals(Intent.ACTION_POWER_CONNECTED)){
event=new ChargingEvent(eventData+"charging.");
} else if(intent.getAction().equals(Intent.ACTION_POWER_DISCONNECTED)){
event=new ChargingEvent(eventData+"discharging.");
}
// Post the event
bus.post(event);
}
}
Comme vous pouvez le voir, la publication de messages sur le bus d’événements ne prend qu’une seule ligne de code. De plus, l’éditeur n’a pas besoin de savoir quoi que ce soit sur le (s) abonné (s).
6. Créer DisplayActivity Classe
DisplayActivity ClasseCréez une nouvelle classe nommée DisplayActivity. Cette classe est chargée d’afficher les messages des événements publiés sur le bus d’événements.
Cette classe a également une variable qui fait référence au bus d’événements. Comme la bibliothèque EventBus suit le modèle singleton, l’instance du bus d’événements disponible Activity 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 register méthode est appelée. Dans notre Activity, nous l’appelons dans le onCreate méthode.
De même, pour ne plus recevoir d’événements, le unregister méthode est appelée. Nous appelons cette méthode dans le onDestroy pour vous assurer que toutes les ressources sont libérées.
le Activity a une disposition très basique, contenant seulement un TextView qui affiche les messages. Il n’est donc pas nécessaire de créer un layout pour celui-ci. Nous utilisons simplement le TextView comme vue du contenu du Activity.
À ce stade, la mise en œuvre du DisplayActivity la classe devrait ressembler à ceci:
package com.hathy.eventbussample;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
import de.greenrobot.event.EventBus;
public class DisplayActivity extends Activity {
private EventBus bus = EventBus.getDefault();
private TextView view;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
view = new TextView(this);
view.setTextSize(20f);
view.setPadding(20, 20, 20, 20);
view.setText("Waiting for events...");
setContentView(view);
// Register as a subscriber
bus.register(this);
}
@Override
protected void onDestroy() {
// Unregister
bus.unregister(this);
super.onDestroy();
}
}
Chaque classe qui a l’intention de 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 sera de type ChargingEvent.
Tout ce que nous faisons dans cette méthode est d’ajouter le dernier message reçu au contenu du TextView. La mise en œuvre du onEvent La méthode ressemble à ceci:
public void onEvent(ChargingEvent event){
view.setText(view.getText() + "n" + event.getData());
}
sept. Exécuter et tester
L’application est maintenant prête à être testée. Compilez et exécutez-le sur un appareil Android physique. Une fois l’application terminée, branchez et débranchez le cordon d’alimentation plusieurs fois pour voir le statut de charge changer.
Conclusion
Dans ce didacticiel, 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 avoir à vous soucier de la taille de votre application. Pour en savoir plus sur la bibliothèque EventBus, visitez le projet sur GitHub.
Soutenez notre effort ❤️
Si vous avez apprécié cet article, pensez à laisser un pourboire pour nous aider à continuer à publier du contenu de qualité.






















