Snabbtips Så här använder du EventBus-biblioteket

Vad du ska skapa

Att bygga en Android-app som har flera aktiva komponenter som kommunicerar med varandra kan bli tråkig. För att spara tid, hamnar utvecklarna ofta med tätt kopplade komponenter i sina appar. EventBus är ett populärt open source-bibliotek som skapades för att lösa detta problem med hjälp av utgivare / abonnent mönster.

Med EventBus-biblioteket kan du skicka meddelanden från en klass till en eller flera klasser på bara några rader av kod. Dessutom är alla involverade klasser helt avkopplade från varandra, vilket leder till kod som är mindre komplex och enklare att underhålla och felsöka.

I det här snabba tipset kommer du att lära dig hur du använder EventBus-biblioteket genom att bygga en enkel Android-applikation som visar laddningsstatus för enheten. Eftersom ändringar i laddningsstatus är systemhändelser kommer appen att ha en Aktivitet som behöver ta emot information från en BroadcastReceiver-Det perfekta scenariot för att använda en händelsebuss.

förutsättningar

Se till att du har Eclipse ADT Bundle. Du kan ladda ner den från Android Developer-webbplatsen.

1. Skapa nytt projekt

Starta Eclipse och skapa en ny Android-applikation. Namn på ansökan EventBusSample. Välj ett unikt paketnamn och ställ in Minimikrav SDK till Android 2,2 och den Mål SDK till Android 4,4.

Vi ska skapa Aktivitet oss själva, så avmarkera Skapa aktivitet och klicka Avsluta.

2. Redigera Manifest

Den här appen har en BroadcastReceiver som svarar på följande åtgärder:

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

Namn på BroadcastReceiver ChargingReceiver och förklara det i AndroidManifest.xml fil.

     

Appen har en Aktivitet för att visa laddningsstatus. Namnge det DisplayActivity och deklarera det enligt nedan.

     

3. Lägg till EventBus-biblioteket

Hämta den senaste versionen av EventBus-biblioteket som en JAR från Maven Central och lägg till JAR i ditt projekt libs katalog.

4. Skapa ChargingEvent Klass

Händelser på evenemangsbussen är ingenting annat än föremål som innehåller den information som behöver kommuniceras. Låta ChargingEvent Var namnet på den klass som innehåller informationen som skickats från BroadcastReceiver till Aktivitet. Det här är en enkel klass som bara har en Sträng att representera informationen. Det har också en konstruktör att ställa in värdet på strängen och en accessor för att få sitt värde.

Skapa en ny fil med namnet ChargingEvent.java och lägg till följande kod till den:

paketet com.hathy.eventbussample; offentlig klass ChargingEvent private String data; offentlig laddningEvent (strängdata) this.data = data;  public String getData () return data; 

5. Skapa BroadcastReceiver Klass

Skapa en ny klass som heter ChargingReceiver som sträcker sig BroadcastReceiver. Den här klassen använder händelsebussen för att publicera meddelanden. Den har en variabel som heter buss, som refererar till bussen som skapats av EventBus-biblioteket. Bussen är en singleton och du måste använda getDefault metod att hänvisa till det.

I onReceive metod skapar vi en ny instans av ChargingEvent klass och lägg till vårt meddelande till det. Här är ett provmeddelande:

@ 14: 23: 20 denna enhet började ladda.

För att generera detta meddelande behöver vi göra följande:

  • Använd de tillgängliga metoderna i Tid klass för att ställa in den tid då händelsen inträffade.
  • Lägg till strängen "den här enheten startade laddning | urladdning" baserat på den mottagna åtgärden. Om åtgärden mottaget är Intent.ACTION_POWER_CONNECTED, enheten laddas. Om det är Intent.ACTION_POWER_DISCONNECTED, enheten är urladdning.

När ChargingEvent objektet har rätt information, den publiceras på evenemangsbussen med posta metod. Genomförandet av ChargingReceiver klassen ska nu se ut så här:

paketet com.hathy.eventbussample; importera de.greenrobot.event.EventBus; importera android.content.BroadcastReceiver; importera android.content.Context; importera android.content.Intent; importera android.text.format.Time; public class ChargingReceiver utökar BroadcastReceiver privat EventBus bus = EventBus.getDefault (); @Override public void onReceive (Context context, Intent intent) ChargingEvent event = null; // Hämta nuvarande tid Tid nu = ny Tid (); now.setToNow (); String timeOfEvent = now.format ("% H:% M:% S"); String eventData = "@" + timeOfEvent + "den här enheten startade"; om (intent.getAction (). motsvarar (Intent.ACTION_POWER_CONNECTED)) event = new ChargingEvent (eventData + "charging.");  annars om (intent.getAction (). equals (Intent.ACTION_POWER_DISCONNECTED)) event = new ChargingEvent (eventData + "urladdning.");  // Lägg till händelsen bus.post (händelse);  

Som du kan se är det bara en enda kodkod att publicera meddelanden till evenemangsbussen. Dessutom behöver utgivaren inte veta något om abonnenten (erna).

6. Skapa DisplayActivity Klass

Skapa en ny klass som heter DisplayActivity. Den här klassen är ansvarig för att visa meddelanden av händelserna som publiceras på evenemangsbussen.

Denna klass har också en variabel som hänvisar till händelsebussen. Som EventBus-biblioteket följer singelmönstret, är förekomsten av evenemangsbussen tillgänglig för detta Aktivitet är detsamma som det exemplar som finns tillgängligt för BroadcastReceiver.

För att en klass ska kunna prenumerera på händelser på bussen, Registrera Metoden åberopas. I vår Aktivitet, vi kallar det i onCreate metod.

På samma sätt, för att sluta ta emot händelser, avregistrera Metoden åberopas. Vi kallar den här metoden i onDestroy metod för att säkerställa att alla resurser frigörs.

De Aktivitet har en mycket grundläggande layout, som bara innehåller en Textview som visar meddelandena. Det är därför inte nödvändigt att skapa en layout för den. Vi använder helt enkelt Textview som innehållsöversikt av Aktivitet.

Vid denna punkt, genomförandet av DisplayActivity klassen ska se så här ut:

paketet com.hathy.eventbussample; importera android.app.Activity; importera android.os.Bundle; importera android.widget.TextView; importera de.greenrobot.event.EventBus; public class DisplayActivity utökar aktivitet private EventBus bus = EventBus.getDefault (); privat textvyvy @Override protected void onCreate (Bundle savedInstanceState) super.onCreate (savedInstanceState); view = new TextView (this); view.setTextSize (20f); view.setPadding (20, 20, 20, 20); view.setText ("Väntar på händelser ..."); setContentView (vy); // Registrera som abonnent bus.register (detta);  @Override protected void onDestroy () // Avregistrera bus.unregister (detta); super.onDestroy (); 

Varje klass som avser att ta emot händelser från evenemangsbussen ska innehålla en onEvent metod. Namnet på den här metoden är viktigt, eftersom EventBus-biblioteket använder Java Reflection API för att komma åt denna metod. Den har en enda parameter som hänvisar till händelsen. I vårt fall kommer parametern att vara av typen ChargingEvent.

Allt vi gör i denna metod lägger till det senast mottagna meddelandet till innehållet i Textview. Genomförandet av onEvent Metoden ser så här ut:

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

7. Kör och testa

Appen är nu redo att bli testad. Kompilera och kör det på en fysisk Android-enhet. När appen är klar med att starta, koppla ur nätsladden ett par gånger och koppla ur laddningsstatusen.

Slutsats

I den här handledningen har du lärt dig hur du använder EventBus-biblioteket och hur mycket det förenklar kommunikationen mellan klasserna. Biblioteket är optimerat för Android-plattformen och är väldigt lätt. Det innebär att du kan använda det i dina projekt utan att behöva oroa dig för din apps storlek. För att lära dig mer om EventBus-biblioteket, besök projektet på GitHub.