La mejor manera de servicio que se inicia la actividad de comunicarse con ella

StackOverflow https://stackoverflow.com/questions/2274641

  •  20-09-2019
  •  | 
  •  

Pregunta

Tengo un servicio que escucha a un socket. Cuando se recibe cierta entrada que es crear una actividad. Cuando se recibe otra entrada, que es matar esta actividad. He luchado por un tiempo para que el servicio comunicarse con la actividad a través AIDL ( http : //developer.android.com/guide/developing/tools/aidl.html ), pero esto parece no ser eficaz. Creo AIDL sólo es efectivo cuando el proceso que ha de ser hablado es un servicio, no cuando se trata de una actividad? Me encantaría algunas indicaciones o sugerencias sobre la manera de resolver mi problema.

Saludos,

¿Fue útil?

Solución

  

Tengo un servicio que escucha una   enchufe. Cuando se recibe cierta entrada   que es crear una actividad.

Por favor, haga esta configurable. Los servicios no se deben iniciar las actividades, excepto en muy circunstancias inusuales (por ejemplo, la toma de una conexión SIP y va a crear un cliente VoIP). Apareciendo una actividad interrumpe al usuario en lo que están haciendo.

  

Cuando se recibe otra entrada, que es   matar a esta actividad.

El único escenario que he visto que esto es un patrón válido se despedía la pantalla de llamada entrante cuando el interlocutor cuelga la línea. Si va a crear un cliente de VoIP, su patrón propuesto debe estar bien, pero por lo demás, por favor, reconsiderar que tiene la actividad desaparece en medio del usuario de usarlo.

  

Creo AIDL sólo es eficaz cuando   el proceso que se va a hablado con es   un servicio, no cuando se trata de una actividad?

No, funciona en la dirección inversa también, pero por lo general sólo si la actividad es el de iniciar el servicio y la unión a él. Más importante aún, AIDL es sólo para la comunicación entre procesos.

  

Me encantaría algunas direcciones o   sugerencias sobre la manera de resolver mi   problema.

realmente no ha proporcionado suficiente información sobre la naturaleza de la comunicación para darle una respuesta completa. ¿Qué, exactamente, es el servicio tratando de decirle a la actividad? Es la actividad también tratando de comunicarse con el servicio?

El patrón recomendado para la comunicación permanente de una actividad a un servicio es utilizar el patrón de unión local. Encontrará un ejemplo de esto en sus muestras de SDK, y usted puede encontrar uno aquí también.

El servicio, entonces tiene opciones para comunicar al cliente: a través de una devolución de llamada (por ejemplo, la Handler en la respuesta suministrada por el Sr. Smiljanić) oa través de Intents emisión. En el caso de la devolución de llamada, la actividad tendría que unirse al servicio con el fin de obtener acceso a una API para proporcionar el objeto de devolución de llamada. El servicio sería entonces aferrarse a ese objeto y llamar a métodos en que durante los eventos clave.

Si el servicio está haciendo su trabajo principal en un subproceso en segundo plano, tendrá que asegurarse de que sus operaciones de interfaz de usuario consiguen realizar en el hilo de interfaz de usuario. El Handler es un enfoque para eso.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top