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..
Asegúrese de tener configurado el paquete Eclipse ADT. Puedes descargarlo desde el sitio web de Android Developer..
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.
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.
Descargue la última versión de la biblioteca EventBus como un JAR de Maven Central y agregue el JAR en su proyecto libs
directorio.
Evento de carga
ClaseLos 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;
Receptor de radiodifusión
ClaseCrear 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:
Hora
clase para establecer la hora en que ocurrió el evento.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).
DisplayActivity
ClaseCrear 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 ());
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.
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.