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?
- Revisión 2: Cómo pasar los datos de un servicio de fondo / subproceso a alguna otra actividad que no sea MainActivity que creó el servicio de fondo
- Actualizar Android ListView en Widget
- Reconocimiento de voz como servicio de fondo
- Temporizador La tarea deja de ejecutarse después de un tiempo indefinido en android
- Servicio de asignar un montón de memoria?
- Obtener: No se permite iniciar el servicio Intención ... sin permiso Proceso de servicio es malo
- Actividad de Android sin GUI
- Android: ¿Cómo repetir un servicio con AlarmManager cada 15 minutos, pero sólo se ejecuta de 8:00 AM a 18:00 PM?
- Detener el servicio hasta que se pueda establecer conexión a Internet
- Cómo enlazar una actividad a un servicio y controlar y administrar el servicio desde la actividad
- Lanzar una excepción personalizada de un servicio a una actividad
- NotificationManager.cancel () no funciona para mí
- Grabación de errores en vídeos android
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
- 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.
- 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!
- Prueba de geocodificación con Google Play Services 6.5.
- Obtener el protocolo Wi-Fi (802.11a / b / g / n) mediante programación