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:

  1. Registrar el servicio con la aplicación
  2. Utilice LocalBinder para conectarse desde la aplicación al servicio.

Solución 1

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?

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/

  • Subir archivo grande en segundo plano (el servicio se reinicia cuando la aplicación se cierra)
  • Clear Aplicaciones recientes limpiar la memoria de aplicaciones y mi receptor dejó de funcionar
  • Servicio Android no lanzado por JUnit test
  • Servicio remoto muerto mientras que el proceso principal está vinculado a él
  • Parámetro startId de servicio de Android
  • Android - Iniciar un servicio con información adicional a través de put / getExtra
  • Servicio de Android e hilo de la interfaz de usuario
  • ¿Cómo iniciar un servicio Android desde una actividad y detener el servicio en otra actividad?
  • Las preferencias compartidas a veces se eliminan
  • ¿Puede existir un servicio de fondo sin su aplicación principal?
  • ¿Cómo seguir reproduciendo música en segundo plano después de que el usuario haga desaparecer la aplicación?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.