Das Erstellen einer Android-App, bei der mehrere aktive Komponenten miteinander kommunizieren, kann langweilig werden. Um Zeit zu sparen, erhalten Entwickler häufig eng gekoppelte Komponenten in ihren Apps. EventBus ist eine beliebte Open-Source-Bibliothek, die zur Lösung dieses Problems mit der Herausgeber / Abonnent Muster.
Mit der EventBus-Bibliothek können Sie Nachrichten von einer Klasse an eine oder mehrere Klassen in nur wenigen Codezeilen übergeben. Darüber hinaus sind alle beteiligten Klassen vollständig voneinander entkoppelt, was zu weniger komplexem Code führt und einfacher zu warten und zu debuggen ist.
In diesem kurzen Tipp erfahren Sie, wie Sie die EventBus-Bibliothek verwenden, indem Sie eine einfache Android-Anwendung erstellen, die den Ladestatus des Geräts anzeigt. Da es sich bei Änderungen des Ladezustands um Systemereignisse handelt, hat die App eine Aktivität
das muss information von einem erhalten Rundfunkempfänger
-das perfekte Szenario für den Einsatz eines Event-Busses.
Stellen Sie sicher, dass Sie das Eclipse ADT-Bundle eingerichtet haben. Sie können es von der Android Developer-Website herunterladen.
Starten Sie Eclipse und erstellen Sie eine neue Android-Anwendung. Benennen Sie die Anwendung EventBusSample
. Wählen Sie einen eindeutigen Paketnamen und legen Sie das fest Minimum Erforderliches SDK zu Android 2.2 und das Ziel-SDK zu Android 4.4.
Wir werden die erstellen Aktivität
uns selbst, also abwählen Aktivität erstellen und klicken Sie auf Fertig.
Diese App hat eine Rundfunkempfänger
das reagiert auf die folgenden Aktionen:
android.intent.action.ACTION_POWER_CONNECTED
android.intent.action.ACTION_POWER_DISCONNECTED
Nenne das Rundfunkempfänger
ChargingReceiver
und erkläre es in der AndroidManifest.xml
Datei.
Die App hat eine Aktivität
um den Ladestatus anzuzeigen. Nennen Sie es DisplayActivity
und erkläre es wie unten gezeigt.
Laden Sie die neueste Version der EventBus-Bibliothek als JAR von Maven Central herunter und fügen Sie die JAR in Ihr Projekt ein Libs
Verzeichnis.
ChargingEvent
KlasseEreignisse auf dem Ereignisbus sind nichts anderes als Objekte, die die Informationen enthalten, die kommuniziert werden müssen. Lassen ChargingEvent
Der Name der Klasse, die die Informationen enthält, die von übergeben wurden Rundfunkempfänger
zum Aktivität
. Dies ist eine einfache Klasse, die nur eine hat String
um die Informationen darzustellen. Es hat auch einen Konstruktor, um den Wert der Zeichenfolge festzulegen, und einen Accessor, um dessen Wert zu erhalten.
Erstellen Sie eine neue Datei mit dem Namen ChargingEvent.java und fügen Sie den folgenden Code hinzu:
Paket com.hathy.eventbussample; öffentliche Klasse ChargingEvent private String-Daten; public ChargingEvent (String data) this.data = data; public String getData () Rückgabedaten;
Rundfunkempfänger
KlasseErstellen Sie eine neue Klasse mit dem Namen ChargingReceiver
das erstreckt sich Rundfunkempfänger
. Diese Klasse verwendet den Ereignisbus zum Veröffentlichen von Nachrichten. Es hat eine Variable namens Bus
, die auf den Bus verweist, der von der EventBus-Bibliothek erstellt wurde. Der Bus ist ein Singleton und Sie müssen den getDefault
Methode, um darauf zu verweisen.
In dem onReceive
Methode erstellen wir eine neue Instanz von ChargingEvent
Klasse und füge unsere Nachricht hinzu. Hier ist eine Beispielnachricht:
@ 14: 23: 20 Das Gerät wurde aufgeladen.
Um diese Nachricht zu generieren, müssen wir Folgendes tun:
Zeit
Klasse, um den Zeitpunkt festzulegen, zu dem das Ereignis aufgetreten ist.Intent.ACTION_POWER_CONNECTED
, Das Gerät wird aufgeladen. Wenn es so ist Intent.ACTION_POWER_DISCONNECTED
, Das Gerät entlädt sich.Einmal die ChargingEvent
Objekt hat die richtigen Informationen, es wird über den Ereignisbus auf dem Ereignisbus veröffentlicht Post
Methode. Die Umsetzung der ChargingReceiver
Die Klasse sollte jetzt so aussehen:
Paket 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 erweitert BroadcastReceiver private EventBus bus = EventBus.getDefault (); @Override public void onReceive (Kontext-Kontext, Absichtsabsicht) ChargingEvent event = null; // Aktuelle Uhrzeit abrufen Time now = new Time (); now.setToNow (); String timeOfEvent = now.format ("% H:% M:% S"); String eventData = "@" + timeOfEvent + "Dieses Gerät wurde gestartet"; if (intent.getAction (). equals (Intent.ACTION_POWER_CONNECTED)) event = new ChargingEvent (eventData + "charge."); else if (intent.getAction (). equals (Intent.ACTION_POWER_DISCONNECTED)) event = new ChargingEvent (eventData + "entladen."); // Veröffentlichen Sie das Ereignis bus.post (Ereignis);
Wie Sie sehen können, erfordert das Veröffentlichen von Nachrichten an den Ereignisbus nur eine einzige Codezeile. Darüber hinaus muss der Herausgeber nichts über die Abonnenten wissen..
DisplayActivity
KlasseErstellen Sie eine neue Klasse mit dem Namen DisplayActivity
. Diese Klasse ist für die Anzeige der Meldungen der auf dem Ereignisbus veröffentlichten Ereignisse verantwortlich.
Auch diese Klasse hat eine Variable, die auf den Ereignisbus verweist. Da die EventBus-Bibliothek dem Singleton-Muster folgt, steht die Instanz des Event-Busses zur Verfügung Aktivität
ist das gleiche wie die Instanz, die dem zur Verfügung steht Rundfunkempfänger
.
Damit eine Klasse Ereignisse auf dem Bus abonnieren kann, muss der registrieren
Methode wird aufgerufen. In unserer Aktivität
, wir nennen es im onCreate
Methode.
Um den Empfang von Ereignissen zu beenden, wird die Registrierung aufheben
Methode wird aufgerufen. Wir nennen diese Methode im onDestroy
Methode, um sicherzustellen, dass alle Ressourcen freigegeben werden.
Das Aktivität
hat ein sehr einfaches Layout, das nur eine enthält Textvorschau
das zeigt die Meldungen an. Es ist daher nicht notwendig, ein Layout dafür zu erstellen. Wir benutzen einfach die Textvorschau
als inhaltliche betrachtung der Aktivität
.
An dieser Stelle ist die Umsetzung der DisplayActivity
Klasse sollte so aussehen:
Paket com.hathy.eventbussample; import android.app.Activity; import android.os.Bundle; import android.widget.TextView; import de.greenrobot.event.EventBus; public class DisplayActivity erweitert Activity private EventBus bus = EventBus.getDefault (); private TextView-Ansicht; @Override protected void onCreate (Bundle savedInstanceState) super.onCreate (savedInstanceState); view = new TextView (this); view.setTextSize (20f); view.setPadding (20, 20, 20, 20); view.setText ("Warten auf Ereignisse ..."); setContentView (Ansicht); // Als Teilnehmer registrieren bus.register (this); @Override protected void onDestroy () // Unregister bus.unregister (this); super.onDestroy ();
Jede Klasse, die Ereignisse vom Ereignisbus empfangen soll, sollte ein onEvent
Methode. Der Name dieser Methode ist wichtig, da die EventBus-Bibliothek das verwendet Java Reflection-API um auf diese Methode zuzugreifen. Es hat einen einzelnen Parameter, der sich auf das Ereignis bezieht. In unserem Fall wird der Parameter vom Typ sein ChargingEvent
.
Alles, was wir in dieser Methode tun, ist, die zuletzt empfangene Nachricht an den Inhalt von anzuhängen Textvorschau
. Die Umsetzung der onEvent
Methode sieht so aus:
public void onEvent (Ereignis ChargingEvent) view.setText (view.getText () + "\ n" + event.getData ());
Die App kann jetzt getestet werden. Kompilieren Sie es und führen Sie es auf einem physischen Android-Gerät aus. Schließen Sie das Netzkabel nach dem Starten der App einige Male an und ziehen Sie den Stecker heraus, um den Ladestatus zu ändern.
In diesem Lernprogramm haben Sie gelernt, wie Sie die EventBus-Bibliothek verwenden und wie sehr die Kommunikation zwischen Klassen vereinfacht wird. Die Bibliothek ist für die Android-Plattform optimiert und sehr leicht. Das bedeutet, dass Sie es in Ihren Projekten verwenden können, ohne sich um die Größe Ihrer App kümmern zu müssen. Um mehr über die EventBus-Bibliothek zu erfahren, besuchen Sie das Projekt auf GitHub.