Das Erstellen einer Android-Anwendung mit mehreren aktiven Komponenten, die miteinander kommunizieren, kann mühsam werden. Um Zeit zu sparen, haben Entwickler häufig eng gekoppelte Komponenten in ihren Anwendungen. EventBus ist eine beliebte Open-Source-Bibliothek, die erstellt wurde, um dieses Problem mithilfe von zu lösen Herausgeber / Abonnent Modell.
Mit der EventBus-Bibliothek können Sie Nachrichten von einer Klasse in nur wenigen Codezeilen an eine oder mehrere Klassen übergeben. Darüber hinaus sind alle beteiligten Klassen vollständig voneinander entkoppelt, was zu weniger komplexem Code führt, der einfacher zu warten und zu debuggen ist.
In diesem kurzen Tipp erfahren Sie, wie Sie die EventBus-Bibliothek verwenden, indem Sie eine einfache Android-App erstellen, die den Ladezustand des Geräts anzeigt. Da Änderungen des Ladezustands Systemereignisse sind, hat die Anwendung eine Activity
Wer muss Informationen von einem erhalten BroadcastReceiver
– Das ideale Szenario für die Verwendung eines Ereignisbusses.
Voraussetzungen
Stellen Sie sicher, dass das Eclipse ADT-Bundle konfiguriert ist. Sie können es von herunterladen Android-Entwickler-Website.
1. Erstellen Sie ein neues Projekt
Starten Sie Eclipse und erstellen Sie eine neue Android-App. Benennen Sie die Anwendung EventBusSample
. Wählen Sie einen eindeutigen Paketnamen und legen Sie ihn fest SDK-Mindestanforderungen beim Android 2.2 und das SDK-Kabel beim Android 4.4.


Wir werden das schaffen Activity
uns selbst, also abwählen Erstellen Sie eine Aktivität und klicken Sie auf Fertig.




2. Manifest bearbeiten
Diese App hat eine BroadcastReceiver
welches auf die folgenden Aktionen reagiert:
android.intent.action.ACTION_POWER_CONNECTED
android.intent.action.ACTION_POWER_DISCONNECTED
Nennen Sie es BroadcastReceiver
ChargingReceiver
und deklarieren Sie es in der AndroidManifest.xml
Datei.
Die App hat eine Activity
um den Ladezustand anzuzeigen. Nennen Sie es DisplayActivity
und deklarieren Sie es wie unten gezeigt.
3. Fügen Sie eine EventBus-Bibliothek hinzu
Laden Sie die neueste Version der EventBus-Bibliothek als JAR von herunter Maven Central und fügen Sie die JAR in Ihr Projekt ein libs
Telefonbuch.
4. Erstellen ChargingEvent
Klassenzimmer
Die Ereignisse auf dem Ereignisbus sind nur Objekte, die die Informationen enthalten, die übermittelt werden müssen. Lassen ChargingEvent
sei der Name der Klasse, die die von der BroadcastReceiver
zum Activity
. Dies ist eine einfache Klasse, die nur eine hat String
Informationen darstellen. Es gibt auch einen Konstruktor zum Festlegen des Werts der Zeichenfolge und einen Accessor zum Abrufen des Werts.
Erstellen Sie eine neue Datei mit dem Namen ChargingEvent.java und fügen Sie den folgenden Code hinzu:
package com.hathy.eventbussample; public class ChargingEvent { private String data; public ChargingEvent(String data){ this.data = data; } public String getData(){ return data; } }
5. Erstellen BroadcastReceiver
Klassenzimmer
Erstellen Sie eine neue Klasse mit dem Namen ChargingReceiver
Ausdehnung BroadcastReceiver
. Diese Klasse verwendet den Ereignisbus zum Posten von Nachrichten. Es hat eine Variable namens bus
Dies bezieht sich auf den von der EventBus-Bibliothek erstellten Bus. Der Bus ist ein Singleton und Sie müssen die verwenden getDefault
Methode, um darauf zu verweisen.
in dem onReceive
Methode erstellen wir eine neue Instanz der ChargingEvent
Klasse und fügen Sie unsere Nachricht hinzu. Hier ist eine Beispielnachricht:
@14:23:20 this device started charging.
Um diese Nachricht zu generieren, müssen wir Folgendes tun:
- Verwenden Sie die im
Time
Klasse, um die Zeit festzulegen, zu der das Ereignis aufgetreten ist. - Fügen Sie die Zeichenfolge „Dieses Gerät hat den Ladevorgang gestartet | hinzu Entladen “abhängig von der empfangenen Aktion. Wenn die empfangene Aktion ist
Intent.ACTION_POWER_CONNECTED
wird das Gerät aufgeladen. Wenn es
Intent.ACTION_POWER_DISCONNECTED
entlädt sich das Gerät.
Sobald die ChargingEvent
Das Objekt hat die richtigen Informationen, es wird mit dem auf dem Ereignisbus veröffentlicht post
Methode. Die Implementierung von ChargingReceiver
Die Klasse sollte jetzt so aussehen:
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); } }
Wie Sie sehen können, benötigt das Senden von Nachrichten an den Ereignisbus nur eine Codezeile. Darüber hinaus muss der Herausgeber nichts über die Abonnenten wissen.
6. Erstellen DisplayActivity
Klassenzimmer
Erstellen Sie eine neue Klasse mit dem Namen DisplayActivity
. Diese Klasse ist für die Anzeige der auf dem Ereignisbus veröffentlichten Ereignismeldungen verantwortlich.
Diese Klasse hat auch eine Variable, die sich auf den Ereignisbus bezieht. Da die EventBus-Bibliothek dem Singleton-Muster folgt, ist die verfügbare Ereignisbusinstanz Activity
ist die gleiche wie die Instanz, die für die verfügbar ist BroadcastReceiver
.
Damit eine Klasse Ereignisse im Bus abonnieren kann, muss die register
Methode wird aufgerufen. In unserer Activity
nennen wir es in der onCreate
Methode.
Um keine Ereignisse mehr zu empfangen, muss die unregister
Methode wird aufgerufen. Wir nennen diese Methode in der onDestroy
um sicherzustellen, dass alle Ressourcen freigegeben werden.
das Activity
hat ein sehr einfaches Layout, das nur eines enthält TextView
welches Nachrichten anzeigt. Es ist daher nicht erforderlich, ein Layout dafür zu erstellen. Wir benutzen nur die TextView
als Blick auf den Inhalt von Activity
.
In dieser Phase ist die Umsetzung der DisplayActivity
Die Klasse sollte folgendermaßen aussehen:
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(); } }
Jede Klasse, die Ereignisse vom Ereignisbus empfangen möchte, muss a enthalten onEvent
Methode. Der Name dieser Methode ist wichtig, da die EventBus-Bibliothek die verwendet API Java Reflection um auf diese Methode zuzugreifen. Es hat einen einzelnen Parameter, der sich auf das Ereignis bezieht. In unserem Fall ist der Parameter vom Typ ChargingEvent
.
Bei dieser Methode wird lediglich die zuletzt empfangene Nachricht an den Inhalt des angehängt TextView
. Die Implementierung von onEvent
Die Methode sieht folgendermaßen aus:
public void onEvent(ChargingEvent event){ view.setText(view.getText() + "n" + event.getData()); }
sept. Ausführen und testen
Die Anwendung kann jetzt getestet werden. Kompilieren Sie es und führen Sie es auf einem physischen Android-Gerät aus. Nachdem die App fertig ist, stecken Sie das Netzkabel mehrmals ein und aus, um zu sehen, wie sich der Ladestatus ändert.
Fazit
In diesem Tutorial haben Sie gelernt, wie Sie die EventBus-Bibliothek verwenden und wie sie die Kommunikation zwischen Klassen vereinfacht. Die Bibliothek ist für die Android-Plattform optimiert und sehr leicht. Dies 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 unter GitHub.
Hinterlasse einen Kommentar