La mejor manera para que el Servicio inicie Actividad para comunicarse con ella
Tengo un servicio que escucha un zócalo. Al recibir ciertas entradas es para crear una actividad. Al recibir otra entrada, es matar esta actividad. He luchado por un tiempo para hacer que el servicio de comunicarse con la actividad a través de AIDL ( http://developer.android.com/guide/developing/tools/aidl.html ), pero esto parece no ser eficaz. Creo que AIDL sólo es eficaz cuando el proceso 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.
Aclamaciones,
- "In / out / inout" en un valor de parámetro de interfaz AIDL?
- AIDL vs Messenger
- Android AIDL apoyo de tipo "corto"?
- ¿Cuándo utilizar un servicio basado en aidl?
- Android Aidl Compile Error: no se pudo encontrar la importación para la clase
- Error al compilar AIDL
- RxJava y datos almacenados en caché
- ¿Se puede utilizar Messenger (alternativa ligera a AIDL) para la comunicación entre aplicaciones?
- No se puede sobrecargar el método en la interfaz AIDL
- Ejemplo de uso de AIDL
- Cómo compilar el archivo aidl en el proyecto android?
- Cómo importar la clase de otro paquete de un proyecto diferente en el archivo AIDL?
- ¿Por qué AIDL / Messenger está enlazado a un Servicio?
Tengo un servicio que escucha un zócalo. Al recibir ciertas entradas es para crear una actividad.
Por favor, haga esto configurable. Los servicios no deben iniciar actividades excepto en circunstancias muy inusuales (por ejemplo, el socket es una conexión SIP y está creando un cliente VOIP). Hacer estallar una actividad interrumpe al usuario en cualquier cosa que esté haciendo.
Al recibir otra entrada, es matar esta actividad.
El único escenario que he visto cuando se trata de un patrón válido es el rechazo de la pantalla en la llamada 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 lo usa.
Creo que AIDL sólo es eficaz cuando el proceso que se debe hablar es un servicio, no cuando se trata de una actividad?
No, también funciona en la dirección inversa, pero normalmente sólo si la actividad es la que inicia el servicio y se une a ella. Más importante aún, AIDL es sólo para la comunicación entre procesos.
Me encantaría algunas direcciones o sugerencias sobre cómo resolver mi problema.
Usted 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 contar 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 usar el patrón de vinculación local. Usted encontrará un ejemplo de esto en sus muestras de SDK, y usted puede encontrar una aquí también.
A continuación, el servicio tiene opciones para comunicarse con el cliente: a través de una devolución de llamada (por ejemplo, el Handler
en la respuesta suministrada por el Sr. Smiljanić) oa través de Intents
difusión. En el caso de la devolución de llamada, la actividad tendría que enlazar al servicio para obtener acceso a una API para proporcionar el objeto de devolución de llamada. El servicio se mantendría en ese objeto y llamaría a los métodos en él durante los eventos clave.
Si el servicio realiza su trabajo principal en un subproceso de fondo, deberá asegurarse de que las operaciones de interfaz de usuario se realicen en el subproceso de la interfaz de usuario. El Handler
es un enfoque para eso.