Comunicarse desde la aplicación al servicio
Quiero comunicarme desde mi Aplicación de Android a mi Servicio de Android. Tengo dos opciones, pero no sé qué elegir:
- Registrar el servicio con la aplicación
- Utilice LocalBinder para conectarse desde la aplicación al servicio.
Solución 1
- Android: cómo obtener la intención recibida por un servicio?
- Priorizar la programación del reinicio del servicio androide bloqueado
- Enviar datos de Servicio a mi actividad
- ¿Por qué el servicio de aplicaciones se reinicia y no puede reiniciarlo?
- Cómo anular el registro de escuchas y detener el servicio desde dentro de broadcastreceiver
La aplicación:
public class MyApplication extends Application { MyService myService; public void setMyService(MyService myService) { this.myService = myService; } public void testCallService(){ myService.sendResponseApdu("test".getBytes()); } }
Y el servicio:
public class MyService extends HostApduService { @Override public void onCreate() { super.onCreate(); ((MyApplication)getApplication()).setMyService(this); } @Override public byte[] processCommandApdu(byte[] commandApdu, Bundle extras) { return new byte[0]; } @Override public void onDeactivated(int reason) { } }
Para llamar al servicio, la aplicación utiliza la referencia al servicio. El Servicio es un servicio local. (No un servicio remoto) ¿Funcionará este enfoque en todas las circunstancias?
Solución 2
Utilice el método LocalService con ServiceConnection para enlazar al servicio conforme al ejemplo en http://developer.android.com/reference/android/app/Service.html#LocalServiceSample
La solución 2 funcionará. ¿Funcionará el ejemplo 1 también? ¿Cuáles son las (des) ventajas de la solución 1 en comparación con la solución 2?
- ¿Hay alguna forma de punto de ruptura dentro de las clases probadas?
- Buenas prácticas para la comunicación asíncrona entre servicios
- Android: intent.putExtra en una clase de servicio para obtener notificaciones
- El servicio no se inició en BOOT COMPLETE
- Servicios android - error: servicio no registrado
- Robospice en el contexto android.os.Service
- Android RemoteExceptions and Services
- Cómo recoger una llamada por adb
Según la documentación oficial de Android, el servicio está destinado a realizar operaciones de larga duración en segundo plano y si hay una cantidad significativa de interacción entre el servicio y las actividades, se recomienda utilizar los servicios vinculados. La razón para usar servicios enlazados es que Binding tiene ventaja de la interfaz rica para la comunicación.
https://stackoverflow.com/a/5066187/2839624
Yo estaba trabajando en una aplicación similar en la que elegí los servicios vinculados por la misma razón con la comunicación de la actividad al servicio a través de la interfaz y la comunicación de eventos de servicio a la actividad utilizando Localbroadcastreceiver.
El segundo enfoque me parece mejor porque el acoplamiento del primero es más fuerte.
Usando aglutinantes, o digamos AIDLS en caso de comunicaciones interprocesos como siempre se prefiere entonces usando una referencia, En caso de leakes o referencias muertas su aplicación irá boom.
Si desea un desacoplamiento completo, puede utilizar receptores de radiodifusión
Si su servicio es local para su aplicación, entonces la mejor forma (más sencilla y más limpia) de hacerlo es usar un LocalBroadcastManager http://developer.android.com/reference/android/support/v4/content/LocalBroadcastManager.html Puede pasar cualquier tipo de objetos entre actividades / fragmentos / servicios sin tener que preocuparse por la seguridad ni la complejidad de su código. Le ayuda a mantener su código delgado y el mantenimiento es más fácil.
Espero eso ayude.
Proporciona una manera fácil de comunicarse con el servicio:
1) Implementar su propio servicio Android de fondo
2) Iniciar y detener el servicio de una actividad, es decir, la interfaz de usuario
3) Enviar / recibir mensajes por el Servicio
4) Enviar / recibir mensajes por la Actividad
El enlace follwing puede ayudarte http://blog.philippheckel.com/2012/06/10/android-example-communication-entre-actividad-y-servicio-using-messaging/
- Android Studio Error JUNIT4! JUnit versión 3.8 o posterior esperado:
- Compartir imágenes desde el almacenamiento interno mediante FileProvider