Schnelltipp So verwenden Sie die EventBus-Bibliothek

Was Sie erstellen werden

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.

Voraussetzungen

Stellen Sie sicher, dass Sie das Eclipse ADT-Bundle eingerichtet haben. Sie können es von der Android Developer-Website herunterladen.

1. Neues Projekt erstellen

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.

2. Manifest bearbeiten

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.

     

3. Fügen Sie die EventBus-Bibliothek hinzu

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.

4. Anlegen ChargingEvent Klasse

Ereignisse 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; 

5. Anlegen Rundfunkempfänger Klasse

Erstellen 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:

  • Verwenden Sie die verfügbaren Methoden im Zeit Klasse, um den Zeitpunkt festzulegen, zu dem das Ereignis aufgetreten ist.
  • Fügen Sie die Zeichenfolge "Dieses Gerät wurde aufgeladen | Entladen" basierend auf der erhaltenen Aktion hinzu. Wenn die Aktion erhalten 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..

6. Anlegen DisplayActivity Klasse

Erstellen 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 ()); 

7. Ausführen und testen

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.

Fazit

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.