Hurtig Tips Slik bruker du EventBus-biblioteket

Hva du skal skape

Å bygge en Android-app som har flere aktive komponenter som kommuniserer med hverandre, kan bli kjedelig. For å spare tid, utvikler utviklerne ofte tett koblede komponenter i sine apper. EventBus er et populært åpen kildebibliotek som ble opprettet for å løse dette problemet ved hjelp av utgiver / abonnent mønster.

Ved hjelp av EventBus-biblioteket kan du sende meldinger fra en klasse til en eller flere klasser på bare noen få linjer med kode. Videre er alle involverte klasser helt avkoblet fra hverandre, noe som fører til kode som er mindre kompleks og enklere å vedlikeholde og feilsøke.

I dette raske tipset skal du lære hvordan du bruker EventBus-biblioteket ved å bygge et enkelt Android-program som viser ladestatusen til enheten. Fordi endringer i ladestatus er systemhendelser, vil appen ha en Aktivitet som trenger å motta informasjon fra en BroadcastReceiver-Det perfekte scenariet for å bruke en eventbuss.

Forutsetninger

Kontroller at du har Eclipse ADT Bundle satt opp. Du kan laste den ned fra Android Developer-nettstedet.

1. Opprett nytt prosjekt

Start Eclipse og opprett et nytt Android-program. Navn søknaden EventBusSample. Velg et unikt pakke navn og sett inn Minimumskrav SDK til Android 2.2 og Mål SDK til Android 4.4.

Vi skal lage Aktivitet oss selv, så avvelg Opprett aktivitet og klikk Bli ferdig.

2. Rediger Manifest

Denne appen har en BroadcastReceiver som reagerer på følgende handlinger:

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

Navn på BroadcastReceiver ChargingReceiver og erklære det i AndroidManifest.xml fil.

     

Appen har en Aktivitet for å vise ladestatus. Navngi det DisplayActivity og erklære det som vist nedenfor.

     

3. Legg til EventBus-biblioteket

Last ned den nyeste versjonen av EventBus-biblioteket som en JAR fra Maven Central og legg til JAR i prosjektets libs katalog.

4. Lag ChargingEvent Klasse

Hendelser på arrangementsbussen er ingenting annet enn gjenstander som inneholder informasjonen som må kommuniseres. La ChargingEvent vær navnet på klassen som inneholder informasjonen som er sendt fra BroadcastReceiver til Aktivitet. Dette er en enkel klasse som bare har en string å representere informasjonen. Det har også en konstruktør å sette verdien av strengen og en accessor for å få sin verdi.

Opprett en ny fil som heter ChargingEvent.java og legg til følgende kode for det:

pakke com.hathy.eventbussample; offentlig klasse ChargingEvent private String data; offentlig ChargingEvent (String data) this.data = data;  offentlig String getData () return data; 

5. Lag BroadcastReceiver Klasse

Opprett en ny klasse som heter ChargingReceiver som strekker seg BroadcastReceiver. Denne klassen bruker hendelsesbussen til å publisere meldinger. Den har en variabel som heter buss, som refererer til bussen som er opprettet av EventBus-biblioteket. Bussen er en singleton og du må bruke getDefault metode for å referere til det.

I OnReceive Metode, vi lager en ny forekomst av ChargingEvent klasse og legg til vår melding til den. Her er en prøvemelding:

@ 14: 23: 20 denne enheten startet lading.

For å generere denne meldingen må vi gjøre følgende:

  • Bruk metodene som er tilgjengelige i Tid klasse for å angi tidspunktet for hendelsen.
  • Legg til strengen "denne enheten startet lading | utlading" basert på den mottatte handlingen. Hvis handlingen mottatt er Intent.ACTION_POWER_CONNECTED, enheten lades. Hvis det er Intent.ACTION_POWER_DISCONNECTED, enheten slipper ut.

Først når ChargingEvent objektet har riktig informasjon, den er publisert på arrangementsbussen ved hjelp av post metode. Gjennomføringen av ChargingReceiver klassen skal nå se slik ut:

pakke com.hathy.eventbussample; importer de.greenrobot.event.EventBus; importer android.content.BroadcastReceiver; importer android.content.Context; importer android.content.Intent; importer android.text.format.Time; offentlig klasse ChargingReceiver utvider BroadcastReceiver private EventBus bus = EventBus.getDefault (); @Override public void onReceive (Kontekst kontekst, hensikt) ChargingEvent event = null; // Få nåværende tid Tid nå = ny Tid (); now.setToNow (); String timeOfEvent = now.format ("% H:% M:% S"); String eventData = "@" + timeOfEvent + "denne enheten startet"; hvis (intent.getAction () er lik (Intent.ACTION_POWER_CONNECTED)) event = new ChargingEvent (eventData + "lading.");  annet hvis (intent.getAction (). likestiller (Intent.ACTION_POWER_DISCONNECTED)) event = new ChargingEvent (eventData + "discharge.");  // Post hendelsen bus.post (event);  

Som du ser, publiserer meldinger til arrangementsbussen bare en enkelt kode. Videre trenger utgiveren ikke å vite noe om abonnenten (e).

6. Lag DisplayActivity Klasse

Opprett en ny klasse som heter DisplayActivity. Denne klassen er ansvarlig for å vise meldingene til hendelsene som er publisert på arrangementsbussen.

Denne klassen har også en variabel som refererer til arrangementsbussen. Som EventBus-biblioteket følger singleton-mønsteret, er forekomsten av arrangementsbussen tilgjengelig for dette Aktivitet er det samme som forekomsten tilgjengelig for BroadcastReceiver.

For å tillate en klasse å abonnere på hendelser på bussen, vil registrere Metoden er påkalt. I vår Aktivitet, vi kaller det i onCreate metode.

På samme måte, for å slutte å motta hendelser, avregistrere Metoden er påkalt. Vi kaller denne metoden i onDestroy Metode for å sikre at alle ressurser frigjøres.

De Aktivitet har en veldig grunnleggende layout, som bare inneholder en TextView som viser meldingene. Det er derfor ikke nødvendig å lage et oppsett for det. Vi bruker bare TextView som innholdsvisning av Aktivitet.

På dette punktet implementeringen av DisplayActivity klassen skal se slik ut:

pakke com.hathy.eventbussample; importer android.app.Activity; importere android.os.Bundle; importer android.widget.TextView; importer de.greenrobot.event.EventBus; offentlig klasse DisplayActivity utvider Aktivitet privat EventBus bus = EventBus.getDefault (); privat tekstvisning; @Override protected void onCreate (Bundle savedInstanceState) super.onCreate (savedInstanceState); view = new TextView (dette); view.setTextSize (20F); view.setPadding (20, 20, 20, 20); view.setText ("Venter på hendelser ..."); setContentView (syn); // Registrer som abonnent bus.register (dette);  @Override protected void onDestroy () // Avregistrer bus.unregister (dette); super.onDestroy (); 

Hver klasse som har tenkt å motta hendelser fra arrangementsbussen, skal inneholde en onEvent metode. Navnet på denne metoden er viktig, fordi EventBus-biblioteket bruker Java Reflection API for å få tilgang til denne metoden. Den har en enkelt parameter som refererer til arrangementet. I vårt tilfelle vil parameteren være av typen ChargingEvent.

Alt vi gjør i denne metoden, legger til siste mottatte melding til innholdet i TextView. Gjennomføringen av onEvent Metoden ser slik ut:

Offentlig tomgang onEvent (ChargingEvent-hendelse) view.setText (view.getText () + "\ n" + event.getData ()); 

7. Kjør og test

Appen er nå klar til å bli testet. Kompilere og kjøre den på en fysisk Android-enhet. Når appen er ferdig med å starte, plugg og koble strømledningen et par ganger for å se ladestatusendringen.

Konklusjon

I denne opplæringen har du lært hvordan du bruker EventBus-biblioteket og hvor mye det forenkler kommunikasjonen mellom klassene. Biblioteket er optimalisert for Android-plattformen og er veldig lett. Dette betyr at du kan bruke den i prosjektene dine uten å måtte bekymre deg for størrelsen på appen din. For å lære mer om EventBus-biblioteket, besøk prosjektet på GitHub.