Sugerencia rápida Cómo utilizar la biblioteca EventBus

Lo que vas a crear

Crear una aplicación para Android que tenga múltiples componentes activos que se comuniquen entre sí puede ser tedioso. Para ahorrar tiempo, los desarrolladores a menudo terminan con componentes estrechamente acoplados en sus aplicaciones. EventBus es una biblioteca de código abierto popular que se creó para resolver este problema usando el editor / suscriptor modelo.

Usando la biblioteca EventBus, puede pasar mensajes de una clase a una o más clases en solo unas pocas líneas de código. Además, todas las clases involucradas están completamente desconectadas entre sí, lo que lleva a un código menos complejo y más fácil de mantener y depurar..

En esta sugerencia rápida, aprenderá a usar la biblioteca EventBus mediante la creación de una sencilla aplicación para Android que muestra el estado de carga del dispositivo. Debido a que los cambios en el estado de carga son eventos del sistema, la aplicación tendrá un Actividad que necesita recibir información de un Receptor de radiodifusión-El escenario perfecto para usar un bus de eventos..

Prerrequisitos

Asegúrese de tener configurado el paquete Eclipse ADT. Puedes descargarlo desde el sitio web de Android Developer..

1. Crear nuevo proyecto

Inicia Eclipse y crea una nueva aplicación para Android. Nombra la aplicación EventBusSample. Elija un nombre de paquete único y establezca la SDK mínimo requerido a Androide 2.2 y el SDK de destino a Androide 4.4.

Vamos a crear el Actividad nosotros mismos, así que deselecciona Crear actividad y haga clic Terminar.

2. Editar Manifiesto

Esta aplicación tiene una Receptor de radiodifusión que responde a las siguientes acciones:

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

Nombra el Receptor de radiodifusión Recargador de carga y declararlo en el AndroidManifest.xml expediente.

     

La aplicación tiene una Actividad para visualizar el estado de carga. Nombralo DisplayActivity y declararlo como se muestra abajo.

     

3. Añadir la biblioteca EventBus

Descargue la última versión de la biblioteca EventBus como un JAR de Maven Central y agregue el JAR en su proyecto libs directorio.

4. Crear Evento de carga Clase

Los eventos en el bus de eventos no son más que objetos que contienen la información que se debe comunicar. Dejar Evento de carga ser el nombre de la clase que contiene la información pasada desde el Receptor de radiodifusión al Actividad. Esta es una clase simple que tiene solo un Cuerda para representar la información. También tiene un constructor para establecer el valor de la cadena y un descriptor de acceso para obtener su valor.

Crear un nuevo archivo llamado ChargingEvent.java y añádele el siguiente código:

paquete com.hathy.eventbussample; clase pública ChargingEvent datos de cadena privados; ChargingEvent público (datos de cadena) this.data = datos;  public String getData () devolver datos; 

5. Crear Receptor de radiodifusión Clase

Crear una nueva clase llamada Recargador de carga que se extiende Receptor de radiodifusión. Esta clase utiliza el bus de eventos para publicar mensajes. Tiene una variable llamada autobús, que hace referencia al bus creado por la librería EventBus. El bus es un singleton y tienes que usar el getDefault método para referirse a él.

En el onReciba Método, creamos una nueva instancia de la Evento de carga Clase y añádele nuestro mensaje. Aquí hay un mensaje de muestra:

@ 14: 23: 20 este dispositivo comenzó a cargar.

Para generar este mensaje, necesitamos hacer lo siguiente:

  • Utilice los métodos disponibles en el Hora clase para establecer la hora en que ocurrió el evento.
  • Agregue la cadena "este dispositivo comenzó a cargarse | descargando" según la acción recibida. Si la acción recibida es Intención.ACCIÓN_PODER_CONECTADO, El dispositivo se está cargando. Si esto es Intención.ACTION_POWER_DISCONNECTED, el dispositivo esta descargando.

Una vez el Evento de carga El objeto tiene la información correcta, se publica en el bus de eventos usando el enviar método. La implementación de la Recargador de carga La clase ahora debería verse así:

paquete com.hathy.eventbussample; import de.greenrobot.event.EventBus; import android.content.BroadcastReceiver; importar android.content.Context; import android.content.Intent; importar android.text.format.Time; La clase pública ChargingReceiver extiende BroadcastReceiver bus privado EventBus = EventBus.getDefault (); @Override public void onReceive (contexto de contexto, intención de intento) evento ChargingEvent = null; // Obtener el tiempo actual Tiempo ahora = nuevo Tiempo (); now.setToNow (); String timeOfEvent = now.format ("% H:% M:% S"); String eventData = "@" + timeOfEvent + "este dispositivo se inició"; if (intent.getAction (). es igual a (Intent.ACTION_POWER_CONNECTED)) event = new ChargingEvent (eventData + "charge.");  else if (intent.getAction (). es igual a (Intent.ACTION_POWER_DISCONNECTED)) event = new ChargingEvent (eventData + "descargando.");  // Publicar el evento bus.post (evento);  

Como puede ver, la publicación de mensajes en el bus de eventos requiere solo una línea de código. Además, el editor no necesita saber nada sobre el (los) suscriptor (es).

6. Crear DisplayActivity Clase

Crear una nueva clase llamada DisplayActivity. Esta clase es responsable de mostrar los mensajes de los eventos publicados en el bus de eventos..

Esta clase también tiene una variable que hace referencia al bus de eventos. A medida que la biblioteca EventBus sigue el patrón de singleton, la instancia del bus de eventos disponible para este Actividad es la misma que la instancia disponible para el Receptor de radiodifusión.

Para permitir que una clase se suscriba a eventos en el bus, el registro Se invoca el método. En nuestro Actividad, lo llamamos en el onCreate método.

Del mismo modo, para dejar de recibir eventos, el anular el registro Se invoca el método. Llamamos a este método en el onDestroy Método para asegurarse de que todos los recursos estén liberados..

los Actividad tiene un diseño muy básico, que contiene sólo un Vista de texto que muestra los mensajes. Por lo tanto, no hay necesidad de crear un diseño para ello. Simplemente usamos el Vista de texto como la vista de contenido de la Actividad.

En este punto, la implementación de la DisplayActivity La clase debería verse así:

paquete com.hathy.eventbussample; importar android.app.Activity; importar android.os.Bundle; importar android.widget.TextView; import de.greenrobot.event.EventBus; La clase pública DisplayActivity extiende la actividad bus privado EventBus = EventBus.getDefault (); vista privada de vista de texto; @Override protected void onCreate (Bundle savedInstanceState) super.onCreate (savedInstanceState); view = new TextView (this); view.setTextSize (20f); view.setPadding (20, 20, 20, 20); view.setText ("Esperando eventos ..."); setContentView (ver); // Registrarse como un suscriptor bus.register (este);  @ Anular anulación protegida onDestroy () // Anular el registro de bus.unregister (this); super.onDestroy (); 

Cada clase que pretenda recibir eventos del bus de eventos debe contener un enEvento método. El nombre de este método es importante, porque la biblioteca EventBus usa el API de reflexión de Java Para acceder a este método. Tiene un único parámetro que se refiere al evento. En nuestro caso, el parámetro va a ser de tipo. Evento de carga.

Todo lo que hacemos en este método es adjuntar el último mensaje recibido a los contenidos de la Vista de texto. La implementación de la enEvento El método se ve así:

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

7. Ejecutar y probar

La aplicación ya está lista para ser probada. Compila y ejecútalo en un dispositivo físico Android. Una vez que la aplicación haya terminado de iniciarse, conecte y desenchufe el cable de alimentación un par de veces para ver cómo cambia el estado de carga.

Conclusión

En este tutorial, has aprendido cómo usar la biblioteca EventBus y cómo simplifica la comunicación entre clases. La biblioteca está optimizada para la plataforma Android y es muy ligera. Esto significa que puede usarlo en sus proyectos sin tener que preocuparse por el tamaño de su aplicación. Para obtener más información sobre la biblioteca EventBus, visite el proyecto en GitHub.