Servicio de Android: proceso vs. no

¿Cuáles son las diferencias prácticas entre poner un servicio en un proceso separado o mantenerlo en el proceso principal de la aplicación? ¿Para qué se utilizaría cada escenario?

Cuando se ejecuta un servicio en el proceso principal, se detendrá en caso de que su aplicación se bloquee por cualquier motivo. Poner un servicio en su propio proceso es razonable para algunos servicios que se pueden utilizar desde diferentes aplicaciones o servicios que deben funcionar independientemente de su aplicación principal.

Las únicas razones que veo para poner un servicio en otro proceso es

  1. La aplicación es un recurso pesado y probablemente va a ser asesinado rápidamente por el sistema operativo. Poner el servicio en un proceso separado distribuirá los recursos y si la aplicación muere su servicio no.
  2. Sólo en caso de que su aplicación tiene errores y muere su servicio continuará.

Sin embargo, si crea una buena aplicación y utiliza una buena programación, no debe ejecutar cualquiera de estos problemas. Al tener su servicio en un proceso separado que causa problemas con cosas como SharedPreferences y acceso concurrente de DB … Yo recomendaría no hacerlo.

Sin mencionar … otro proceso significa otro DVM. Esto requerirá más recursos que correr en un DVM y ralentizar las cosas.

También poner el servicio en otro proceso hace que sus cambios de variables estáticas sean invisibles para el proceso principal. Usted puede obtener la situación, cuando se asigna una variable con algún valor, y no se cambia! Pasé todo el día para este problema!

A continuación se incluye una cita del sitio web del desarrollador de Android .

Tenga en cuenta que los servicios, al igual que otros objetos de aplicación, se ejecutan en el subproceso principal de su proceso de alojamiento. Esto significa que, si su servicio va a hacer cualquier uso intensivo de la CPU (como la reproducción de MP3) o el bloqueo (como la red) las operaciones, debe generar su propio hilo en el que hacer ese trabajo.

Jake señala que puedes, a través de manifestar, controlar el Nombre del proceso que está ejecutando. Sin embargo, tras los resultados de Documentatioin:

La mayoría de la confusión acerca de la clase de servicio en realidad gira en torno a lo que no es:

  • Un servicio no es un proceso separado. El objeto Service en sí no implica que se ejecute en su propio proceso; A menos que se especifique lo contrario, se ejecuta en el mismo proceso que la aplicación de la que forma parte.

Esto es interesante, lo que se dice Aquí está:

El nombre del proceso en el que 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 aplicación. El atributo de proceso del elemento puede establecer un valor predeterminado diferente para todos los componentes. Sin embargo, el componente puede anular el valor predeterminado con su propio atributo de proceso, lo que le permite extender su aplicación a través de múltiples procesos.

Pero de todos modos, si necesita que el Servicio se exponga a otras aplicaciones, por ejemplo, es necesario proporcionar contenido (como la agenda) a otras aplicaciones, establecer servicio para ejecutar en diferentes procesos es la razón.

Usar el atributo de proceso de un servicio es rechazado por el analizador de manifiesto por lo que es bastante engañoso!

  • Google Cloud Messaging - GCM - SERVICE_NOT_AVAILABLE
  • Depurar servicio de fondo en android utilizando intelliJ
  • ¿Puede existir un servicio de fondo sin su aplicación principal?
  • La llamada de servicio vuelve a la actividad en android
  • ¿Es posible utilizar la herencia en las interfaces AIDL?
  • Diferencia entre los receptores de servicio y difusión en android
  • PopUp diálogo Android de hilo de fondo
  • El mejor enfoque para ejecutar el servicio en Android
  • Servicio de Android: onBind (Intención) y onUnbind (Intención) se llama una sola vez
  • Android: Unidad de prueba de un servicio
  • Android - Ejecutar en segundo plano - Service vs. standard java class
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.