2010-12-04 16 views
12

Por favor, explique un Android Service. ¿Cómo se diferencia de un Activity? ¿Depende de un estado de aplicación como ejecutar en el primer plano/fondo ?Servicio de Android

Respuesta

28

Desde el Android Developer's SDK reference for Service:

Un servicio es un componente de aplicación que representa el deseo sea una de aplicación para realizar una operación de más largo en funcionamiento mientras no interactúa con el usuario o para proporcionar funcionalidad para el uso de otras aplicaciones.

Es muy importante tener en cuenta

que los servicios, al igual que otros objetos de aplicación, ejecute en el hilo principal de su proceso de alojamiento. Esto significa que, si su servicio va a realizar operaciones intensivas en la CPU (como la reproducción de MP3) o de bloqueo (como las redes), debe generar su propio hilo para hacer ese trabajo.

Esto es en contraste a una actividad que se entiende mejor como algo que un usuario ve e interactúa con directamente (una interfaz de usuario.)

un servicio, como se mencionó anteriormente, se puede utilizar para las operaciones de más largos corriendo eso continuará incluso si no tiene actividad en primer plano, pero puede, y eventualmente morirá por el ciclo de vida de Android si se deja en el estado "de fondo". Si necesita que su servicio continúe ejecutándose como una sola instancia sin que lo maten y lo reinicien, le recomiendo colocar startForeground(int id, Notification notification) en el método onCreate de su Servicio y stopForeground(boolean removeNotification) en el método onDestroy de su Servicio.

Por ejemplo, tengo una aplicación que usa un foreground Service para registrar datos del acelerómetro toda la noche mientras el dispositivo Android está junto al cuerpo del usuario. A pesar de que no está obligado a estar activo, también tengo una Activity que transmitió una Intent a un BroadcastReceiver dentro del Service que cuenta la Service que deberá emitir también un Intent con los datos del acelerómetro como extras a un BroadcastReceiver dentro del Activity.

Código: SleepActivity SleepAccelerometerService

Buena suerte y quiero saber si usted necesita más información!

+1

su segundo enlace "SleepAccelerometerService" está roto. – gonzobrains

+0

¿Necesita usar algún tipo de WakeLock para mantener su servicio en funcionamiento incluso cuando el teléfono se queda dormido? – gonzobrains

+0

Tenga en cuenta que para cada operación de larga duración y con uso intensivo de CPU, es posible que desee ejecutar su código de servicio en una nueva secuencia ya que los Servicios se ejecutan de forma predeterminada y viven en el subproceso UI. Puede usar IntentService para la mayoría de sus necesidades. HandlerThread y ThreadPoolExecutor son alternativas más flexibles pero más complejas. –