Sfat rapid Cum să utilizați Biblioteca EventBus

Ce veți crea

Construirea unei aplicații Android care are mai multe componente active comunicând între ele poate deveni obositoare. Pentru a economisi timp, dezvoltatorii ajung adesea cu componente strâns cuplate în aplicațiile lor. EventBus este o populară open-source bibliotecă care a fost creată pentru a rezolva această problemă folosind editor / abonat model.

Utilizând biblioteca EventBus, puteți transmite mesaje dintr-o clasă la una sau mai multe clase în doar câteva rânduri de cod. Mai mult decât atât, toate clasele implicate sunt complet decuplate unul de celălalt, ducând la un cod care este mai puțin complex și mai ușor de întreținut și depanat.

În acest sfat rapid, veți învăța cum să utilizați biblioteca EventBus construind o aplicație Android simplă care afișează starea de încărcare a dispozitivului. Deoarece modificările în starea de încărcare sunt evenimente de sistem, aplicația va avea un Activitate care trebuie să primească informații de la BroadcastReceiver-scenariul perfect pentru utilizarea unei magistrale de evenimente.

Cerințe preliminare

Asigurați-vă că aveți setul de pachete ADT Eclipse. Puteți să o descărcați de pe site-ul Android Developer.

1. Creați un nou proiect

Porniți Eclipse și creați o nouă aplicație Android. Denumiți aplicația EventBusSample. Alegeți un nume de pachet unic și setați SDK minim necesar la Android 2.2 si SDK destinație la Android 4.4.

Vom crea Activitate noi înșine, deselectează-ne Creați activitate și faceți clic pe finalizarea.

2. Edit Manifest

Această aplicație are una BroadcastReceiver care răspunde următoarelor acțiuni:

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

Denumiți BroadcastReceiver ChargingReceiver și să o declare în AndroidManifest.xml fişier.

     

Aplicația are unul Activitate pentru a afișa starea de încărcare. Numeste DisplayActivity și declarați așa cum este arătat mai jos.

     

3. Adăugați Biblioteca EventBus

Descărcați cea mai recentă versiune a librăriei EventBus ca JAR de la Maven Central și adăugați JAR în proiectul dvs. libs director.

4. Creați ChargingEvent Clasă

Evenimentele din magistrala evenimentelor nu sunt decât obiecte care conțin informațiile care trebuie comunicate. Lăsa ChargingEvent să fie numele clasei care conține informațiile transmise de la BroadcastReceiver la Activitate. Aceasta este o clasă simplă, care are doar a Şir pentru a reprezenta informațiile. De asemenea, are un constructor pentru a seta valoarea șirului și a unui accesoriu pentru a obține valoarea acestuia.

Creați un fișier nou numit ChargingEvent.java și adăugați următorul cod:

pachet com.hathy.eventbussample; clasa publica ChargingEvent date private String; public ChargingEvent (date despre șir) this.data = date;  public String getData () return date; 

5. Creați BroadcastReceiver Clasă

Creați o nouă clasă numită ChargingReceiver care se extinde BroadcastReceiver. Această clasă utilizează magistrala pentru evenimente pentru a publica mesaje. Are o variabilă numită autobuz, care se referă la magistrala creată de biblioteca EventBus. Autobuzul este un singleton și trebuie să utilizați getDefault se referă la aceasta.

În onReceive metoda, vom crea o nouă instanță a ChargingEvent și adăugați mesajul nostru. Iată un exemplu de mesaj:

@ 14: 23: 20 acest dispozitiv a început să se încarce.

Pentru a genera acest mesaj, trebuie să facem următoarele:

  • Utilizați metodele disponibile în Timp pentru a seta ora la care a avut loc evenimentul.
  • Adăugați șirul "acest dispozitiv a început încărcarea | descărcarea", pe baza acțiunii primite. Dacă acțiunea primită este Intent.ACTION_POWER_CONNECTED, dispozitivul se încarcă. Dacă este Intent.ACTION_POWER_DISCONNECTED, dispozitivul se descarcă.

Odata ce ChargingEvent obiectul are informațiile corecte, este publicat pe magistrala evenimentului utilizând post metodă. Punerea în aplicare a directivei ChargingReceiver clasa ar trebui să arate astfel:

pachet com.hathy.eventbussample; import de.greenrobot.event.EventBus; import șiroid.content.BroadcastReceiver; importați android.content.Context; import șiroid.content.Intent; importați android.text.format.Time; public class ChargingReceiver extinde BroadcastReceiver private EventBus bus = EventBus.getDefault (); @Override public void onReceive (Contextul contextului, intenția intenției) Eventul ChargingEvent = null; // Obțineți ora curentă Ora acum = nou Ora (); now.setToNow (); String timeOfEvent = acum.format ("% H:% M:% S"); String eventData = "@" + timeOfEvent + "acest dispozitiv a început"; dacă (intent.getAction () este egal cu (Intent.ACTION_POWER_CONNECTED)) event = nou ChargingEvent (eventData + "încărcare.");  else dacă (intent.getAction () este egal cu (Intent.ACTION_POWER_DISCONNECTED)) event = nou ChargingEvent (eventData + "descărcare.");  // Postați evenimentul bus.post (eveniment);  

După cum puteți vedea, publicarea mesajelor către magistrala de evenimente are doar o singură linie de cod. Mai mult, editorul nu are nevoie să știe nimic despre abonatul (abonații).

6. Creați DisplayActivity Clasă

Creați o nouă clasă numită DisplayActivity. Această clasă este responsabilă pentru afișarea mesajelor evenimentelor publicate pe magistrala evenimentului.

Această clasă are de asemenea o variabilă care se referă la busul de evenimente. Deoarece biblioteca EventBus urmărește modelul singleton, instanța busului de evenimente disponibilă pentru aceasta Activitate este același cu instanța disponibilă BroadcastReceiver.

Pentru a permite unei clase să se aboneze la evenimente de pe magistrala Inregistreaza-te metoda este invocată. În a noastră Activitate, o numim în onCreate metodă.

În mod similar, pentru a opri recepționarea evenimentelor, anulați înregistrarea metoda este invocată. Noi numim această metodă în onDestroy pentru a vă asigura că toate resursele sunt eliberate.

Activitate are un layout foarte simplu, care conține doar a TextView care afișează mesajele. Prin urmare, nu este nevoie să creați un aspect pentru acesta. Pur și simplu folosim TextView ca vizualizare a conținutului Activitate.

În acest moment, punerea în aplicare a DisplayActivity clasa ar trebui să arate astfel:

pachet com.hathy.eventbussample; importă android.app.Activity; import android.os.Bundle; import șiroid.widget.TextView; import de.greenrobot.event.EventBus; clasa publica DisplayActivity extinde Activitatea private EventBus bus = EventBus.getDefault (); vizualizare privată TextView; @Override protejate void onCreate (Bundle savedInstanceState) super.onCreate (savedInstanceState); view = new TextView (aceasta); view.setTextSize (20f); vizualizarea.setului (20, 20, 20, 20); view.setText ("Așteptare pentru evenimente ..."); setContentView (vizualizare); // Înregistrați-vă ca un abonat bus.register (acest);  @Override protejate void onDestroy () / Unregister bus.unregister (this); super.onDestroy (); 

Fiecare clasă care intenționează să primească evenimente din autobuzul evenimentului ar trebui să conțină una onEvent metodă. Numele acestei metode este important, deoarece biblioteca EventBus utilizează Java Reflection API pentru a accesa această metodă. Are un singur parametru care se referă la eveniment. În cazul nostru, parametrul va fi de tip ChargingEvent.

Tot ceea ce facem în această metodă este să adăugăm ultimul mesaj primit conținutului TextView. Punerea în aplicare a directivei onEvent metoda arată astfel:

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

7. Rulați și testați

Aplicația este acum gata să fie testată. Compilați-l și rulați-l pe un dispozitiv fizic Android. Odată ce aplicația a terminat de lansat, conectați și deconectați cablul de alimentare de câteva ori pentru a vedea modificarea stării de încărcare.

Concluzie

În acest tutorial, ați învățat cum să utilizați biblioteca EventBus și cât de mult simplifică comunicarea între clase. Biblioteca este optimizată pentru platforma Android și este foarte ușoară. Acest lucru înseamnă că îl puteți utiliza în proiectele dvs. fără să vă faceți griji cu privire la dimensiunea aplicației dvs. Pentru a afla mai multe despre biblioteca EventBus, vizitați proiectul pe GitHub.

Cod