Primero de todo, me gustaría decir dos cosas. La primera vez, lo siento si esta pregunta ya se ha hecho, he buscado preguntas similares sobre este tema, pero no he podido encontrar una solución. En segundo lugar, disculpe la larga pregunta y, por favor, avísenme de cualquier error y me aseguraré de hacer los cambios adecuados :).¿Servicio compartido de Android?
Soy relativamente nuevo en el desarrollo de Android (aproximadamente 2 meses), así que por favor perdone mi ignorancia. La pregunta que tengo es sobre el servicio de Android.
Mi problema es el siguiente, he creado las 3 aplicaciones siguientes:
- Una biblioteca androide que contiene un servicio de prueba pequeña (myService).
- Una aplicación (TestApplicationOne) que tiene acceso a la biblioteca de Android.
- Otra aplicación (TestApplicationTwo) que también tiene acceso a la biblioteca de Android.
Mi solución actual funciona de la siguiente manera, TestApplicationOne referencia a la biblioteca personalizada y utiliza esta biblioteca para conectarse al servicio (myService) a través del método bindService(). Tras la conexión exitosa, la aplicación se agrega a una colección de observadores ubicados dentro de myService. Cada objeto de esta colección se notifica cada vez que el servicio necesita transmitir un mensaje.
Cuando se ejecutó, la solución anterior parecía funcionar bien. Sin embargo, ahora tengo otra aplicación (TestApplicationTwo) que también desea utilizar el mismo servicio que el anterior. La implementación de TestApplicationTwo se creó con el mismo funcionamiento/especificación de la primera aplicación (TestApplicationOne).
El problema que tengo es que cuando el servicio se inicia en cualquiera de las aplicaciones, la otra aplicación no recibe ninguna notificación de ningún evento.
He intentado implementar varios enfoques para resolver esto. Como usar el patrón Singleton para retener una sola instancia, pero el problema parece existir. Mi única comprensión de esto es que cada vez que se inicia cualquiera de las aplicaciones, se crea una nueva instancia de la biblioteca. Por lo tanto, la biblioteca a la que se hace referencia en TestApplicationOne no es la misma instancia que la biblioteca a la que se hace referencia en TestApplicationTwo, y como resultado, no se ha notificado.
¿Hay alguien con alguna experiencia en este tema? ¿O puede pensar en alguna posible solución?
Gracias de antemano por cualquier ayuda, es muy apreciada.
John
Blunt, pero una respuesta de todos modos. Gracias por tu ayuda. El producto terminado solo lo utilizaré personalmente, por lo que la solución exportada con un filtro de intención parece ser un posible enfoque. Examinaré más esta sugerencia y actualizaré esta pregunta con mi enfoque elegido. De nuevo, gracias por tu ayuda. – JohnHodkinson
Me sorprende que no menciones compartir un proceso. Tal vez la respuesta es obsoleta? – dcow
@dcow: en el mejor de los casos, eso funcionaría si el escenario de producción indica que las dos aplicaciones están firmadas por la misma clave de firma, y eso no está claro a partir de la pregunta. En segundo lugar, espero sinceramente que el escenario que describa todavía implique máquinas virtuales separadas (que simplemente estén en un solo proceso), en cuyo caso no sería de ayuda. Dos aplicaciones que compartan la misma máquina virtual en el mismo proceso serían problemáticas, por colisiones de classpath si nada más. – CommonsWare