2012-02-26 13 views
14

Tengo una aplicación de Android que consiste en una actividad y un servicio. Actualmente ambos existen en el mismo proceso y usan el mismo montón pero quiero separar el proceso/montón para el servicio. Es decir. Quiero que el servicio sea completamente independiente de la actividad, de modo que si la actividad falla, no afectará el servicio. Sin embargo, quiero que se puedan instalar como una aplicación única. es posible?Cómo crear una actividad y un servicio de Android que usan procesos separados

Respuesta

22

Definitivamente es posible. Ver el atributo process para service en AndroidManifest.xml

http://developer.android.com/guide/topics/manifest/service-element.html

Para citar:

El nombre del proceso en el que el servicio se va a ejecutar. Normalmente, todos los componentes de una aplicación se ejecutan en el proceso predeterminado creado para la aplicación. Tiene el mismo nombre que el paquete de la aplicación. El atributo de proceso del elemento puede establecer un valor predeterminado diferente para todos los componentes. Pero el componente puede anular el valor predeterminado con su propio atributo de proceso, lo que le permite distribuir su aplicación en múltiples procesos.

Si el nombre asignado a este atributo comienza con dos puntos (':'), se crea un nuevo proceso, privado para la aplicación, cuando es necesario y el servicio se ejecuta en ese proceso. Si el nombre del proceso comienza con un carácter en minúscula, el servicio se ejecutará en un proceso global de ese nombre, siempre que tenga permiso para hacerlo. Esto permite que los componentes en diferentes aplicaciones compartan un proceso, reduciendo el uso de recursos.

+0

Agradable. @lyricsboy pero una Pregunta: en el escenario de OP, cuando Android mata la Actividad (de ahí la aplicación), ¿habrá matado también al Servicio en ejecución si está en el mismo proceso? –

+0

Depende de cómo se inicia el servicio (qué modo) y otros factores relacionados con la memoria. Puede encontrar más detalles en: http://developer.android.com/guide/topics/fundamentals/processes-and-threads.html – lyricsboy

+0

Gracias, eso fue – chris

5

IPC for services es En mi humilde opinión solo se requiere si el servicio debe ser consumido por otras aplicaciones.

La ejecución de un servicio en su propio proceso tiene las pequeñas ventajas de que el recolector de basura para el servicio no afecta a su aplicación y que la memoria del servicio es un poco menor si se ejecuta solo.

Si el consumo del servicio por otras aplicaciones no es un requisito para usted, prefiera un servicio local. De forma alternativa, puede ejecutar el servicio en su propio proceso y utilizar una comunicación diferente con su aplicación, p. a través de un receptor de difusión. Traté de describir los diferentes enfoques en mi tutorial de servicio Android bajo el siguiente enlace: Activity and service communication.

+0

no es el (servicio en proceso separado) la única forma de evitar que el servicio se llame propio onDestroy cuando se destruye la actividad de llamada? – EsmaeelQash

+0

Hola Vogella, ¿puedes explicarme cualquier escenario en el que decidamos "consumo del servicio por otras aplicaciones", no estoy recibiendo este término. gracias – SRam

+0

La ejecución de un servicio en un proceso separado ayuda a garantizar que, en caso de que el proceso de la aplicación principal finalice, el servicio pueda continuar. Entonces esto es bastante útil. – Luca

Cuestiones relacionadas