tipos studio servicios servicio programacion para móviles implementar desarrollo curso aplicaciones android process service

studio - Android: ¿cómo decidir si ejecutar un servicio en un proceso separado?



servicio para android (4)

Reducción del uso de RAM

La documentación del desarrollador de Android sugiere que esto podría ser apropiado para mantener el uso de la RAM de servicio.

Desde la administración de la memoria de tu aplicación: utiliza múltiples procesos :

Un ejemplo de cuándo pueden ser apropiados varios procesos es cuando se construye un reproductor de música que reproduce música de un servicio durante un período de tiempo prolongado. Si toda la aplicación se ejecuta en un proceso, entonces muchas de las asignaciones realizadas para su UI de actividad deben mantenerse mientras esté reproduciendo música, incluso si el usuario se encuentra actualmente en otra aplicación y el servicio está controlando la reproducción. Una aplicación como esta se puede dividir en dos procesos: uno para su interfaz de usuario y el otro para el trabajo que continúa ejecutándose en el servicio en segundo plano.

Por lo tanto, ejecutar el servicio en un proceso separado podría reducir el impacto en el rendimiento de la aplicación y, a la vez, reducir la probabilidad de que el servicio muera cuando el sistema tiene poca memoria RAM.

Rendimiento de rendimiento reducido

Desde la administración de la memoria de su aplicación: Cambio de aplicaciones :

Si su aplicación tiene un proceso en caché y retiene la memoria que actualmente no necesita, entonces su aplicación, incluso cuando el usuario no la usa, está limitando el rendimiento general del sistema. Entonces, como el sistema tiene poca memoria, puede matar procesos en la memoria caché LRU comenzando con el proceso utilizado menos recientemente, pero también dando cierta consideración hacia los procesos que consumen más memoria.

Probabilidad reducida de ser asesinado

Desde la administración de la memoria de tu aplicación: libera la memoria a medida que la memoria se vuelve más ajustada :

Nota: Cuando el sistema comienza a matar procesos en la memoria caché de LRU, aunque principalmente funciona de abajo hacia arriba, da cierta consideración a qué procesos consumen más memoria y, por lo tanto, proporcionará al sistema más ganancia de memoria si se elimina. De modo que cuanta menos memoria consuma mientras se encuentre en la lista de LRU en general, mayores serán sus posibilidades de permanecer en la lista y poder reanudarla rápidamente.

Por lo tanto, es menos probable que se mate su servicio cuando está en un proceso separado, ya que el uso de RAM del proceso será menor ya que el servicio no comparte los recursos de la interfaz de usuario.

Cuándo hacer esto

Si su servicio no usa startForeground() , he encontrado que Android simplemente lo matará cuando necesite liberar RAM, por lo que el consumo de RAM del servicio no es demasiado importante. Entonces, si solo está considerando el impacto en el rendimiento del sistema operativo y otras aplicaciones, no creo que valga la pena ejecutar el servicio en un proceso separado.

Sin embargo, si usa startForeground() , Android intentará mantener su servicio con vida tanto como sea posible, por lo que cualquier RAM que use el proceso tendrá un impacto en el sistema operativo y otras aplicaciones. Entonces, en este caso, recomiendo usar un proceso separado, que podría ahorrar al menos 10MB de RAM, para que no disminuya la velocidad de los dispositivos de los usuarios.

Además, tenga en cuenta que hacer que su aplicación sea un proceso múltiple no es fácil; Las SharedPreferences de Android no admiten múltiples procesos. SharedPreferences implementación de SharedPreferences en uno de mis proyectos , pero aún no la publiqué para su reutilización.

Estoy trabajando en una aplicación de Android que recopila datos de sensores en el transcurso de varias horas. Para eso, tenemos un Servicio que recopila los Datos del Sensor (por ejemplo, Aceleración, GPS, ...), procesa y almacena de manera remota en un servidor.

Actualmente, este Servicio se ejecuta en un proceso separado (usando android: service = ": background" en el manifiesto). Esto complica la comunicación entre las Actividades y el Servicio, pero mis predecesores crearon la Aplicación de esta manera porque pensaron que separar el Servicio de las Actividades lo haría más estable.

Me gustaría algunas razones más objetivas para el esfuerzo de ejecutar un proceso separado. ¿Cuáles son las ventajas? ¿Realmente se ejecuta más estable? ¿Es menos probable que el sistema destruya el servicio (para liberar recursos) si está en un proceso separado?

Nuestra aplicación utiliza startForeground() y amigos para minimizar la posibilidad de que el sistema operativo los mate.

Los documentos de Android no son muy específicos al respecto, la mayoría afirman que depende del propósito de la aplicación ;-)

TL; DR ¿Cuáles son los motivos objetivos para poner un servicio de larga ejecución en un proceso separado (en Android)?


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. Ver el tutorial del servicio Android para más detalles.


Separar el servicio para que se ejecute en un proceso diferente no lo hace más estable, pero en algunos casos, hace que su aplicación sea más estable, ya que si este servicio falla, su aplicación no se bloqueará y se podrá recuperar.

Eli


El primer lugar para comenzar es leyendo la descripción de los ciclos de vida de los componentes . Lo que resta de eso es que realmente no se garantiza que un Service u otro componente se pueda ejecutar durante un largo período de tiempo.

Sin embargo, parece que un Service es la elección correcta para la funcionalidad que describes. Esto se debe a que está realizando algunas operaciones que no están dirigidas al usuario. Volviendo a la descripción del ciclo de vida, cada vez que una actividad no está en primer plano, es esencialmente un candidato para ser asesinado.

Lo que debería considerar es usar AlarmManager para activar su Service periódicamente . También puede consultar la biblioteca WakefulIntent creada por @CommonsWare.

Hay un buen artículo que describe la multitarea y los procesos en el blog de Android llamado Multitasking the Android Way que podría llegar a algunos de los detalles sobre los procesos que le interesan. Por ejemplo:

Un malentendido común sobre la multitarea de Android es la diferencia entre un proceso y una aplicación. En Android estas no son entidades estrechamente conectadas: las aplicaciones pueden parecer presentes para el usuario sin un proceso real que ejecute la aplicación; múltiples aplicaciones pueden compartir procesos, o una aplicación puede hacer uso de múltiples procesos según sus necesidades; el proceso (s) de una aplicación puede mantenerse en Android, incluso cuando esa aplicación no está haciendo algo activamente.