2010-02-16 10 views
6

Tengo un servicio que escucha un socket. Al recibir cierta información, es para crear una actividad. Al recibir otra entrada, es para matar esta actividad. He luchado durante un tiempo para que el servicio se comunique con la actividad a través de AIDL (http://developer.android.com/guide/developing/tools/aidl.html), pero esto parece no ser efectivo. Creo que AIDL solo es efectivo cuando el proceso con el que se debe hablar es un servicio, no cuando se trata de una actividad. Me encantaría algunas direcciones o sugerencias sobre cómo resolver mi problema.La mejor manera para el Servicio que inicia la actividad para comunicarse con él

Cheers,

Respuesta

9

que tiene un servicio que escucha a una toma de . Cuando se recibe cierta entrada , se crea una actividad.

Por favor haga esto configurable. Los servicios no deberían ser actividades de inicio, excepto en muy circunstancias inusuales (por ejemplo, el socket es una conexión SIP y está creando un cliente VOIP). Desarrollar una actividad interrumpe al usuario en lo que sea que esté haciendo.

Al recibir otra entrada, es matar esta actividad.

El único escenario que he visto donde este es un patrón válido es descartar la pantalla de llamada entrante cuando la otra parte cuelga la línea. Si está creando un cliente VOIP, su patrón propuesto debería estar bien, pero, de lo contrario, reconsidere que la actividad desaparezca en el medio del usuario que la usa.

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, también funciona en el sentido inverso, pero generalmente solo si la actividad es la que inicia el servicio y se vincula al mismo. Más importante aún, AIDL es solo 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é es exactamente lo que el servicio intenta decir sobre la actividad? ¿La actividad también está tratando de comunicarse con el servicio?

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

El servicio tiene opciones para comunicarse de nuevo con el cliente: a través de una devolución de llamada (por ejemplo, Handler en la respuesta proporcionada por el Sr. Smiljanić) o por difusión Intents. En el caso de la devolución de llamada, la actividad tendría que vincularse al servicio para obtener acceso a una API para proporcionar el objeto de devolución de llamada. El servicio se aferraría a ese objeto y llamaría a los métodos durante los eventos clave.

Si su servicio está realizando su trabajo principal en una cadena de fondo, deberá asegurarse de que sus operaciones de interfaz de usuario se realicen en la secuencia de la interfaz de usuario. El Handler es un enfoque para eso.

+0

Muy bueno Mr. CommonsWare;) –

Cuestiones relacionadas