¿Cuál es la diferencia entre un IntentService y un Servicio?

¿Puedes ayudarme a entender cuál es la diferencia entre un servicio de IntentService y un Service ?

En resumen, un Servicio es una implementación más amplia para que el desarrollador establezca operaciones en segundo plano, mientras que un Servicio de Intento es útil para operaciones de “disparar y olvidar”, teniendo cuidado de la creación y limpieza del hilo de fondo.

De los documentos:

Service A Service es un componente de aplicación que representa el deseo de una aplicación de realizar una operación de mayor duración sin interactuar con el usuario o para proporcionar funcionalidad para el uso de otras aplicaciones.

IntentService Service es una clase base para los Servicios de IntentService que manejan las solicitudes asincrónicas (expresadas como Intents) bajo demanda. Los clientes envían solicitudes a través de llamadas startService(Intent) ; el servicio se inicia según sea necesario, maneja cada intención a su vez utilizando un hilo de trabajo, y se detiene cuando se queda sin trabajo.

Consulte este documento: http://developer.android.com/reference/android/app/IntentService.html

Service es una clase base de implementación de servicios. Service ejecuta en el hilo principal de la aplicación, lo que puede reducir el rendimiento de la aplicación. Por lo tanto, IntentService , que es una subclase directa de Servicio, está disponible para facilitar las cosas.

IntentService se utiliza para realizar una determinada tarea en segundo plano. Una vez hecho esto, la instancia de IntentService termina automáticamente. Ejemplos de su uso serían descargar cierto recurso de Internet.

Diferencias

  1. Service clase de Service usa el hilo principal de la aplicación, mientras que IntentService crea un hilo de trabajo y usa ese hilo para ejecutar el servicio.
  2. IntentService crea una cola que pasa un bash a la vez a onHandleIntent() . Por lo tanto, la implementación de un subproceso múltiple debe hacerse extendiendo la clase de Service directamente. Service clase de Service necesita una parada manual usando stopSelf() . Mientras tanto, IntentService se detiene automáticamente cuando finaliza la ejecución.
  3. IntentService implementa onBind() que devuelve null . Esto significa que IntentService no puede vincularse por defecto.
  4. IntentService implementa onStartCommand() que envía Intent a la cola y a onHandleIntent() .

En resumen, solo hay dos cosas que hacer para usar IntentService . En primer lugar, para implementar el constructor. Y en segundo lugar, para implementar onHandleIntent() . Para otros métodos de callback, es necesario llamar al super para que pueda rastrearse correctamente.

servicio: se ejecuta en segundo plano en su sistema. Por ejemplo,

  1. Si fue a un hotel y le da su pedido de sopa a un servidor
  2. El servidor recibe tu pedido y lo envía al chef
  3. No sabes cómo se hace la sopa en la cocina y qué procesos se requieren para hacer la sopa
  4. Una vez que su orden está lista, el servidor le trae la sopa.

proceso de fondo: chef haciendo sopa

IntentService: – es un servicio consecutivo … (es decir) cuando ordena muchos alimentos al servidor, pero el servidor los entrega uno por uno y no los entrega todos al mismo tiempo.

Vea la publicación de Tejas Lagvankar sobre este tema. A continuación se detallan algunas diferencias clave entre Service e IntentService y otros componentes.

enter image description here

Service ejecuta realmente en el mismo hilo de su aplicación; cuando extiende el Servicio, debe generar manualmente nuevos hilos para ejecutar operaciones de locking de CPU.

vs

IntentService es una subclase de Service que genera un hilo para hacer un trabajo de fondo desde allí (no es necesario crear un nuevo hilo para hacer operaciones de locking de CPU).

Servicio

  • Tarea sin interfaz de usuario, pero no debe usarse para tareas largas. Use Thread dentro del servicio para tareas largas
  • Invocar por onStartService()
  • Activado desde cualquier hilo
  • Se ejecuta en el hilo principal
  • Puede bloquear el hilo main(UI )

IntentService

  • Tarea larga generalmente no hay comunicación con el hilo principal si la comunicación es necesaria, entonces es realizada por Handler o transmitida
  • Invocar a través de Intención
  • desencadenado desde el subproceso principal (la intención se recibe en el subproceso principal y el subproceso de trabajo se genera )
  • Se ejecuta en un hilo separado
  • No podemos ejecutar tareas en paralelo y múltiples intenciones están en cola en el mismo hilo de trabajo.

Service : funciona en el hilo principal, por lo que provocará un ANR (Android no responde) después de unos segundos.

IntentService : Service con otro subproceso de fondo que funciona por separado para hacer algo sin interactuar con el hilo principal.

Diferencias

  1. La clase de servicio usa el hilo principal de la aplicación, mientras que IntentService crea un hilo de trabajo y usa ese hilo para ejecutar el servicio.
  2. IntentService crea una cola que pasa un bash a la vez a onHandleIntent (). Por lo tanto, la implementación de un subproceso múltiple debe hacerse extendiendo la clase de servicio directamente.
  3. La clase de servicio necesita una parada manual usando stopSelf (). Mientras tanto, IntentService se detiene automáticamente cuando no hay intención en la cola.
  4. IntentService implementa onBind () que devuelve null. Esto significa que IntentService no puede vincularse por defecto.
  5. IntentService implementa onStartCommand () que envía Intent a la cola y a onHandleIntent ().

Servicio

Esta es la clase base para todos los servicios. Cuando amplíe esta clase, es importante que cree un nuevo hilo para realizar todo el trabajo del servicio, ya que el servicio utiliza el hilo principal de su aplicación, de forma predeterminada, lo que podría ralentizar el rendimiento de cualquier actividad que ejecute su aplicación.

IntentService

Esta es una subclase de Servicio que usa un hilo de trabajo para manejar todas las solicitudes de inicio, una a la vez. Esta es la mejor opción si no requiere que su servicio maneje múltiples solicitudes simultáneamente. Todo lo que necesita hacer es implementar onHandleIntent (), que recibe la intención de cada solicitud de inicio para que pueda hacer el trabajo en segundo plano.

Diferencias

La clase de servicio usa el hilo principal de la aplicación, mientras que IntentService crea un hilo de trabajo y usa ese hilo para ejecutar el servicio. IntentService crea una cola que pasa un bash a la vez a onHandleIntent (). Por lo tanto, la implementación de un subproceso múltiple debe hacerse extendiendo la clase de servicio directamente. La clase de servicio necesita una parada manual usando stopSelf (). Mientras tanto, IntentService se detiene automáticamente cuando no hay intención en la cola. IntentService implementa onBind () que devuelve null. Esto significa que IntentService no puede vincularse por defecto. IntentService implementa onStartCommand () que envía Intent a la cola y a onHandleIntent ().

El servicio intencional es hijo del Servicio

IntentService: si quieres descargar un montón de imágenes al inicio de la apertura de tu aplicación. Es un proceso de una sola vez y puede limpiarse una vez que todo se haya descargado.

Servicio: un servicio que se utilizará constantemente para comunicarse entre su aplicación y el back-end con llamadas API web. Incluso si ha terminado con su tarea actual, aún desea que sea unos minutos más tarde, para más comunicación