Android: Service vs SingleTop Actividad se trasladó al fondo – ¿cuál es la diferencia?

Actualmente estoy desarrollando una aplicación que reproduce el audio de vapor usando la clase MediaPlayer. Y declararía su actividad principal (jugador) como SingleTop. También en el botón "Back" hace moveTaskToBack(true) que actúa igual que el botón Home hace. Por lo que sólo se queda y juega en segundo plano y si el usuario quiere ver el gui que acaba de iniciar la aplicación una vez más (que es menos conveniente) o hace clic en la notificación de la aplicación especial. Salida a través del menú.
Pero ¿cuáles son los beneficios de usar el servicio en lugar de actividad en tal caso? Definitivamente, sería más complejo de desarrollar, tengo que decir. Incluso la instancia de la interfaz gráfica de usuario, mientras que "en el fondo" tomará mucho más tiempo, me temo.

Desde la documentación de Android:

Actividades Una actividad representa una sola pantalla con una interfaz de usuario. Por ejemplo, una aplicación de correo electrónico puede tener una actividad que muestra una lista de nuevos correos electrónicos, otra actividad para componer un correo electrónico y otra actividad para leer correos electrónicos.

Servicios Un servicio es un componente que se ejecuta en segundo plano para realizar operaciones de larga duración o para realizar trabajos para procesos remotos. Un servicio no proporciona una interfaz de usuario. Por ejemplo, un servicio puede reproducir música en segundo plano mientras el usuario se encuentra en una aplicación diferente o puede obtener datos a través de la red sin bloquear la interacción del usuario con una actividad. Otro componente, como una actividad, puede iniciar el servicio y dejarlo correr o enlazar con él para interactuar con él.

además

Una vez iniciado, un servicio puede ejecutarse en segundo plano indefinidamente, incluso si el componente que lo inició se destruye.

El sistema operativo Android puede destruir su actividad si se queda sin recursos, pero no destruirá el servicio.

EDIT: debe utilizar startForeground() para garantizar que su Service no se startForeground() en situaciones en las que los recursos son bajos. De los documentos:

Haga que este servicio se ejecute en primer plano, proporcionando la notificación en curso que se mostrará al usuario mientras se encuentre en este estado. Por defecto los servicios son de fondo, lo que significa que si el sistema necesita matarlos para recuperar más memoria (por ejemplo, para mostrar una página grande en un navegador web), se pueden matar sin demasiado daño. Puede establecer esta bandera si matar su servicio sería perjudicial para el usuario, como si su servicio está realizando reproducción de música de fondo, por lo que el usuario se daría cuenta si su música dejó de jugar.

  • ActivityManager # getRunningServices devuelve el servicio que se detiene manualmente
  • Implementación de un temporizador de cuenta atrás utilizando Servicio en segundo plano
  • Comunicarse desde la aplicación al servicio
  • Cómo detener la repetición de servicios de alarma en Android?
  • ¿Android mata cada servicio o el proceso entero?
  • Cómo programar una ejecución de código en android o: ¿qué son exactamente los hilos de daemon en android?
  • Enfoque eficiente para comprobar continuamente si la conexión a Internet está disponible en Android
  • ¿Debo usar PendingIntent.getService () o getBroadcast con AlarmManager?
  • El servicio android se reinicia en la aplicación matado
  • Android: no se puede iniciar la intención de servicio: ¿no se encuentra?
  • Vinculación / desvinculación a un servicio en una aplicación
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.