Cómo crear una actividad y un servicio de Android que usan procesos separados

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?

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

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

Citar:

El nombre del proceso donde se ejecutará el servicio. 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.

El IPC para servicios solo se requiere en mi humilde opinión si el servicio debe ser consumido por otras aplicaciones.

Ejecutar un servicio en su propio proceso tiene las pequeñas ventajas de que el recolector de basura para el servicio no afecta 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, por ejemplo, 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: Actividad y comunicación de servicio .