¿Cuál es la diferencia entre service, intentService en Android?
android-asynctask android-service (2)
Esta pregunta ya tiene una respuesta aquí:
- Service vs IntentService 12 respuestas
¿Cuál es la diferencia entre Service
y IntentService
en Android?
¿Cuál es la diferencia entre AsyncTask
y un IntentService
en Android?
En resumen, un Servicio es una implementación más amplia para que el desarrollador configure operaciones en segundo plano, mientras que un IntentService es útil para operaciones de "disparar y olvidar", cuidando la creación y limpieza de subprocesos en segundo plano.
De la documentación:
Service A Service es un componente de la aplicación que representa el deseo de una aplicación de realizar una operación de ejecución más larga sin interactuar con el usuario o de proporcionar funcionalidad para que otras aplicaciones la utilicen.
IntentService IntentService es una clase base para Servicios que manejan solicitudes asíncronas (expresadas como Intenciones) a pedido. Los clientes envían solicitudes a través de llamadas de inicio de servicio (Intención); el servicio se inicia según sea necesario, maneja cada Intent a su vez utilizando un subproceso de trabajo y se detiene cuando se queda sin trabajo.
¿Cuál es la diferencia entre un IntentService y un Servicio?
1. Diferencia entre Servicio e IntentService
Servicio : es la clase base para los servicios de Android, que puede ampliar para crear cualquier servicio. Dado que el servicio se ejecuta dentro del subproceso de la interfaz de usuario, requiere que cree un subproceso de trabajo para ejecutar su trabajo.
IntentService : es una subclase de Service
, que simplifica su trabajo. Ya funciona en un hilo de trabajo y puede recibir solicitudes asíncronas. Por lo tanto, no necesita crearlo manualmente o preocuparse por la sincronización. Simplemente puede extenderlo y anular el método:
onHandleIntent(Intent intent)
donde podrás gestionar todas las solicitudes entrantes.
IntentService
la documentation , puede ver en detalle lo que IntentService
hace por usted:
- Crea un subproceso de trabajo predeterminado que ejecuta todos los intentos entregados a
onStartCommand()
separado del subproceso principal de su aplicación. - Crea una cola de trabajo que pasa una intención a la vez a su implementación
onHandleIntent()
, para que nunca tenga que preocuparse por los subprocesos múltiples. - Detiene el servicio después de que se hayan manejado todas las solicitudes de inicio, por lo que nunca tendrá que llamar a
stopSelf()
. - Proporciona la implementación predeterminada de
onBind()
que devuelve nulo. - Proporciona una implementación predeterminada de
onStartCommand()
que envía la intención a la cola de trabajo y luego a su implementaciónonHandleIntent()
.
Por lo tanto, si necesita más control, puede usar la clase de Service
, pero a menudo para un servicio simple, la mejor solución es IntentService
.
2. Diferencia entre AsyncTask y Service
Son dos conceptos diferentes.
Servicio: puede entenderse como una Actividad sin interfaz. Es adecuado para operaciones de larga duración.
AsyncTask: es una clase particular que envuelve un hilo de trabajo (realizando operaciones en segundo plano), facilitando la interacción con el hilo de la interfaz de usuario, sin administrar los hilos ni los controladores directamente.