Suggerimento rapido come utilizzare la libreria EventBus

Cosa starai creando

Costruire un'app per Android con più componenti attivi che comunicano tra loro può diventare noioso. Per risparmiare tempo, gli sviluppatori spesso finiscono con componenti strettamente accoppiati nelle loro app. EventBus è una famosa libreria open source creata per risolvere questo problema usando il editore / sottoscrittore modello.

Usando la libreria EventBus, puoi passare messaggi da una classe a una o più classi in poche righe di codice. Inoltre, tutte le classi coinvolte sono completamente separate l'una dall'altra, portando a un codice che è meno complesso e più facile da mantenere ed eseguire il debug.

In questo suggerimento rapido, imparerai come utilizzare la libreria EventBus creando una semplice applicazione Android che visualizza lo stato di ricarica del dispositivo. Poiché i cambiamenti nello stato di ricarica sono eventi di sistema, l'app avrà un Attività che ha bisogno di ricevere informazioni da a BroadcastReceiver-lo scenario perfetto per l'utilizzo di un bus eventi.

Prerequisiti

Assicurati di avere impostato il pacchetto Eclipse ADT. Puoi scaricarlo dal sito web degli sviluppatori Android.

1. Crea nuovo progetto

Avvia Eclipse e crea una nuova applicazione Android. Dai un nome all'applicazione EventBusSample. Scegli un nome di pacchetto univoco e imposta il SDK richiesto minimo a androide 2.2 e il SDK target a androide 4.4.

Creeremo il Attività noi stessi, quindi deseleziona Crea attività e fare clic finire.

2. Modifica manifesto

Questa app ha uno BroadcastReceiver che risponde alle seguenti azioni:

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

Dai il nome a BroadcastReceiver ChargingReceiver e dichiararlo nel AndroidManifest.xml file.

     

L'app ne ha uno Attività per visualizzare lo stato di ricarica. Nominalo DisplayActivity e dichiararlo come mostrato di seguito.

     

3. Aggiungi la libreria EventBus

Scarica l'ultima versione della libreria EventBus come JAR da Maven Central e aggiungi il JAR nei tuoi progetti libs elenco.

4. Crea ChargingEvent Classe

Gli eventi sul bus eventi non sono altro che oggetti contenenti le informazioni che devono essere comunicate. Permettere ChargingEvent sii il nome della classe che contiene le informazioni passate dal BroadcastReceiver al Attività. Questa è una classe semplice che ha solo un Stringa per rappresentare l'informazione. Ha anche un costruttore per impostare il valore della stringa e un accessor per ottenere il suo valore.

Crea un nuovo file chiamato ChargingEvent.java e aggiungere il seguente codice ad esso:

pacchetto com.hathy.eventbussample; public class ChargingEvent private String data; public ChargingEvent (String data) this.data = data;  public String getData () return data; 

5. Crea BroadcastReceiver Classe

Crea una nuova classe chiamata ChargingReceiver quello si estende BroadcastReceiver. Questa classe utilizza il bus eventi per pubblicare messaggi. Ha una variabile chiamata autobus, che fa riferimento al bus creato dalla libreria EventBus. L'autobus è un singleton e devi usare il getDefault metodo per riferirsi ad esso.

Nel OnReceive metodo, creiamo una nuova istanza di ChargingEvent classe e aggiungere il nostro messaggio ad esso. Ecco un messaggio di esempio:

@ 14: 23: 20 questo dispositivo ha iniziato a caricarsi.

Per generare questo messaggio, dobbiamo fare quanto segue:

  • Utilizzare i metodi disponibili in Tempo classe per impostare l'ora in cui si è verificato l'evento.
  • Aggiungi la stringa "questo dispositivo ha iniziato a caricare | scarica" ​​in base all'azione ricevuta. Se l'azione ricevuta è Intent.ACTION_POWER_CONNECTED, il dispositivo è in carica. Se è Intent.ACTION_POWER_DISCONNECTED, il dispositivo sta scaricando.

Una volta il ChargingEvent l'oggetto ha le giuste informazioni, è pubblicato sul bus degli eventi usando il inviare metodo. L'implementazione del ChargingReceiver la classe dovrebbe ora assomigliare a questa:

pacchetto com.hathy.eventbussample; import de.greenrobot.event.EventBus; importare android.content.BroadcastReceiver; importare android.content.Context; import android.content.Intent; import android.text.format.Time; public class ChargingReceiver estende BroadcastReceiver bus EventBus privato = EventBus.getDefault (); @Override public void onReceive (Context context, Intent intent) ChargingEvent event = null; // Ottieni ora corrente Ora ora = nuova Ora (); now.setToNow (); String timeOfEvent = now.format ("% H:% M:% S"); String eventData = "@" + timeOfEvent + "dispositivo avviato"; if (intent.getAction (). equals (Intent.ACTION_POWER_CONNECTED)) event = new ChargingEvent (eventData + "charge.");  else if (intent.getAction (). equals (Intent.ACTION_POWER_DISCONNECTED)) event = new ChargingEvent (eventData + "discharging.");  // Posta l'evento bus.post (evento);  

Come puoi vedere, la pubblicazione dei messaggi sul bus degli eventi richiede solo una singola riga di codice. Inoltre, l'editore non ha bisogno di sapere nulla sugli abbonati.

6. Crea DisplayActivity Classe

Crea una nuova classe chiamata DisplayActivity. Questa classe è responsabile della visualizzazione dei messaggi degli eventi pubblicati sul bus eventi.

Anche questa classe ha una variabile che fa riferimento al bus degli eventi. Poiché la libreria EventBus segue il modello singleton, l'istanza del bus eventi è disponibile per questo Attività è uguale all'istanza disponibile per BroadcastReceiver.

Per consentire a una classe di iscriversi agli eventi sul bus, il Registrare il metodo è invocato. Nel nostro Attività, lo chiamiamo nel onCreate metodo.

Allo stesso modo, per smettere di ricevere eventi, il annullare la registrazione il metodo è invocato. Chiamiamo questo metodo nel OnDestroy metodo per assicurarsi che tutte le risorse siano liberate.

Il Attività ha un layout molto semplice, contenente solo a TextView che visualizza i messaggi. Non è quindi necessario creare un layout per questo. Usiamo semplicemente il TextView come la vista del contenuto del Attività.

A questo punto, l'implementazione del DisplayActivity la classe dovrebbe assomigliare a questa:

pacchetto com.hathy.eventbussample; importare android.app.Activity; importare android.os.Bundle; import android.widget.TextView; import de.greenrobot.event.EventBus; public class DisplayActivity estende Activity bus EventBus privato = EventBus.getDefault (); vista TextView privata; @Override protected void onCreate (Bundle savedInstanceState) super.onCreate (savedInstanceState); view = new TextView (this); view.setTextSize (20f); view.setPadding (20, 20, 20, 20); view.setText ("In attesa di eventi ..."); setContentView (vista); // Registrati come sottoscrittore bus.register (questo);  @Override protected void onDestroy () // Annulla registrazione bus.unregister (this); super.onDestroy (); 

Ogni classe che intende ricevere eventi dal bus eventi deve contenere un OnEvent metodo. Il nome di questo metodo è importante, perché la libreria EventBus utilizza il API Java Reflection per accedere a questo metodo. Ha un singolo parametro che si riferisce all'evento. Nel nostro caso, il parametro sarà di tipo ChargingEvent.

Tutto ciò che facciamo in questo metodo è aggiungere l'ultimo messaggio ricevuto al contenuto del TextView. L'implementazione del OnEvent il metodo assomiglia a questo:

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

7. Esegui e prova

L'app è ora pronta per essere testata. Compilalo ed eseguilo su un dispositivo Android fisico. Una volta che l'app ha terminato l'avvio, collega e scollega il cavo di alimentazione un paio di volte per vedere come cambia lo stato della ricarica.

Conclusione

In questo tutorial, hai imparato come utilizzare la libreria EventBus e quanto semplifica la comunicazione tra le classi. La libreria è ottimizzata per la piattaforma Android ed è molto leggera. Ciò significa che puoi utilizzarlo nei tuoi progetti senza doversi preoccupare delle dimensioni della tua app. Per saperne di più sulla libreria EventBus, visita il progetto su GitHub.