Snelle tip gebruik van de EventBus-bibliotheek

Wat je gaat creëren

Het bouwen van een Android-app met meerdere actieve componenten die met elkaar communiceren, kan vervelend worden. Om tijd te besparen, hebben ontwikkelaars vaak last van nauw gekoppelde componenten in hun apps. EventBus is een populaire open-sourcebibliotheek die is gemaakt om dit probleem op te lossen met behulp van de uitgever / abonnee patroon.

Met behulp van de EventBus-bibliotheek kunt u berichten van één klasse naar één of meerdere klassen doorgeven in slechts enkele regels code. Bovendien zijn alle betrokken klassen volledig van elkaar losgekoppeld, wat leidt tot code die minder complex is en gemakkelijker te onderhouden en te debuggen.

In deze snelle tip leert u hoe u de EventBus-bibliotheek gebruikt door een eenvoudige Android-applicatie te bouwen die de laadstatus van het apparaat weergeeft. Omdat veranderingen in de laadstatus systeemgebeurtenissen zijn, krijgt de app een Activiteit die informatie van een moet ontvangen Uitzending ontvanger-het perfecte scenario voor het gebruik van een evenementenbus.

voorwaarden

Zorg ervoor dat u de Eclipse ADT-bundel hebt ingesteld. Je kunt het downloaden van de Android Developer-website.

1. Maak een nieuw project

Start Eclipse en maak een nieuwe Android-applicatie. Geef de applicatie een naam EventBusSample. Kies een unieke pakketnaam en stel de Minimaal vereiste SDK naar Android 2.2 en de Target SDK naar Android 4.4.

We gaan het maken Activiteit onszelf, dus maak de selectie ongedaan Activiteit maken en klik Af hebben.

2. Manifest bewerken

Deze app heeft er een Uitzending ontvanger die reageert op de volgende acties:

  • android.intent.action.ACTION_POWER_CONNECTED
  • android.intent.action.ACTION_POWER_DISCONNECTED

Noem de Uitzending ontvanger ChargingReceiver en verklaar het in de AndroidManifest.xml het dossier.

     

De app heeft er een Activiteit om de laadstatus weer te geven. Noem maar op DisplayActivity en verklaar het zoals hieronder getoond.

     

3. Voeg EventBus Library toe

Download de nieuwste versie van de EventBus-bibliotheek als een JAR van Maven Central en voeg de JAR toe aan uw project libs directory.

4. Maken ChargingEvent Klasse

Gebeurtenissen op de gebeurtenisbus zijn niets anders dan objecten die de informatie bevatten die moet worden gecommuniceerd. Laat ChargingEvent de naam zijn van de klasse die de informatie bevat die is doorgegeven van de Uitzending ontvanger naar de Activiteit. Dit is een eenvoudige klasse die alleen een Draad om de informatie te vertegenwoordigen. Het heeft ook een constructor om de waarde van de string en een accessor in te stellen om de waarde ervan te krijgen.

Maak een nieuw bestand met de naam ChargingEvent.java en voeg de volgende code eraan toe:

pakket com.hathy.eventbussample; public class ChargingEvent private String-gegevens; openbaar ChargingEvent (String-gegevens) this.data = data;  public String getData () retourgegevens; 

5. Creëren Uitzending ontvanger Klasse

Maak een nieuwe klasse met de naam ChargingReceiver dat breidt zich uit Uitzending ontvanger. Deze klasse gebruikt de gebeurtenisbus om berichten te publiceren. Het heeft een variabele met de naam bus, die verwijst naar de bus die is gemaakt door de EventBus-bibliotheek. De bus is een singleton en je moet de getDefault methode om ernaar te verwijzen.

In de onReceive methode, maken we een nieuw exemplaar van de ChargingEvent klasse en voeg onze boodschap eraan toe. Hier is een voorbeeldbericht:

@ 14: 23: 20 dit apparaat begon op te laden.

Om dit bericht te genereren, moeten we het volgende doen:

  • Gebruik de methoden die beschikbaar zijn in de Tijd klasse om het tijdstip in te stellen waarop de gebeurtenis plaatsvond.
  • Voeg de reeks toe "dit apparaat begon met laden | ontladen" op basis van de ontvangen actie. Als de ontvangen actie is Intent.ACTION_POWER_CONNECTED, het apparaat laadt op. Als het is Intent.ACTION_POWER_DISCONNECTED, het apparaat is bezig met ontladen.

Zodra de ChargingEvent object heeft de juiste informatie, het wordt gepubliceerd op de gebeurtenisbus met behulp van de post methode. De implementatie van de ChargingReceiver klasse zou er nu als volgt uit moeten zien:

pakket com.hathy.eventbussample; import de.greenrobot.event.EventBus; import android.content.BroadcastReceiver; importeer android.content.Context; importeer android.content.Intent; importeer android.text.format.Time; openbare klasse ChargingReceiver breidt BroadcastReceiver uit private EventBus-bus = EventBus.getDefault (); @Override public void onReceive (Context context, Intent intent) ChargingEvent event = null; // Krijg huidige tijd Tijd nu = nieuwe tijd (); now.setToNow (); String timeOfEvent = now.format ("% H:% M:% S"); String eventData = "@" + timeOfEvent + "dit apparaat is gestart"; 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 + "ontladen.");  // Post de gebeurtenis bus.post (evenement);  

Zoals je kunt zien, kost het publiceren van berichten naar de gebeurtenisbus slechts één regel code. Bovendien hoeft de uitgever niets te weten over de abonnee (s).

6. Creëren DisplayActivity Klasse

Maak een nieuwe klasse met de naam DisplayActivity. Deze klasse is verantwoordelijk voor het weergeven van de berichten van de evenementen die zijn gepubliceerd op de gebeurtenisbus.

Deze klasse heeft ook een variabele die verwijst naar de gebeurtenisbus. Omdat de EventBus-bibliotheek het singleton-patroon volgt, is de instantie van de gebeurtenisbus hiertoe beschikbaar Activiteit is hetzelfde als het exemplaar dat beschikbaar is voor de Uitzending ontvanger.

Om een ​​klasse in staat te stellen zich te abonneren op evenementen op de bus, moet de registreren methode wordt aangeroepen. In onze Activiteit, we noemen het in de onCreate methode.

Evenzo, om te stoppen met het ontvangen van evenementen, de uitschrijven methode wordt aangeroepen. We noemen deze methode in de onDestroy methode om ervoor te zorgen dat alle middelen vrij zijn.

De Activiteit heeft een heel eenvoudige lay-out, met alleen een Tekstweergave die de berichten weergeeft. Het is daarom niet nodig om er een lay-out voor te maken. We gebruiken gewoon de Tekstweergave als de inhoudsopgave van de Activiteit.

Op dit punt is de implementatie van de DisplayActivity klasse zou er als volgt uit moeten zien:

pakket com.hathy.eventbussample; import android.app.Activity; import android.os.Bundle; import android.widget.TextView; import de.greenrobot.event.EventBus; public class DisplayActivity breidt activiteit uit private EventBus-bus = EventBus.getDefault (); privé TextView-weergave; @Override protected void onCreate (Bundle savedInstanceState) super.onCreate (savedInstanceState); view = nieuwe TextView (this); view.setTextSize (20f); view.setPadding (20, 20, 20, 20); view.setText ("Wachten op gebeurtenissen ..."); setContentView (view); // Registreer als een abonnee bus.register (dit);  @Override protected void onDestroy () // Maak bus.unregister (dit) ongedaan; super.onDestroy (); 

Elke klas die van plan is evenementen van de evenementenbus te ontvangen, moet een onevent methode. De naam van deze methode is belangrijk, omdat de EventBus-bibliotheek de Java Reflection API om toegang te krijgen tot deze methode. Het heeft een enkele parameter die naar de gebeurtenis verwijst. In ons geval zal de parameter van het type zijn ChargingEvent.

Alles wat we doen in deze methode is het laatst ontvangen bericht toevoegen aan de inhoud van de Tekstweergave. De implementatie van de onevent methode ziet er als volgt uit:

public void onEvent (ChargingEvent event) view.setText (view.getText () + "\ n" + event.getData ()); 

7. Uitvoeren en testen

De app is nu klaar om te worden getest. Compileer en voer het uit op een fysiek Android-apparaat. Nadat de app is opgestart, koppelt u het netsnoer een paar keer los en trekt u de stekker uit het stopcontact om de laadstatus te wijzigen.

Conclusie

In deze zelfstudie hebt u geleerd hoe u de EventBus-bibliotheek gebruikt en hoeveel deze de communicatie tussen klassen vereenvoudigt. De bibliotheek is geoptimaliseerd voor het Android-platform en is erg lichtgewicht. Dit betekent dat u het in uw projecten kunt gebruiken zonder u zorgen te hoeven maken over de grootte van uw app. Bezoek het project op GitHub voor meer informatie over de EventBus-bibliotheek.