La diferencia entre IntentService y Servicio
1. Conceptos básicos
El servicio en Android se utiliza para servicios en segundo plano. Cuando la aplicación se cuelga en segundo plano, es necesario asegurarse de que algunos componentes de la aplicación aún puedan funcionar. Se ha introducido el concepto de Servicio, por lo que lo que se debe enfatizar aquí es que el Servicio no es un proceso independiente ni un hilo independiente. En otras palabras, no se recomienda. escriba en el Servicio con más frecuencia lógica y operaciones que consumen mucho tiempo (operaciones que consumen mucho tiempo en el hilo principal); de lo contrario, se producirá ANR.
Luego, cuando la lógica que escribimos, que requiere mucho tiempo, debe ser administrada por el servicio, debemos introducir IntentService. IntentService hereda el Servicio, por lo que contiene todas las características del Servicio y, por supuesto, también incluye la vida del Servicio. ciclo, entonces lo que se diferencia del servicio es que cuando IntentService realiza la operación onCreate, abre un hilo internamente para realizar las operaciones que requieren mucho tiempo.
1. Servicio
El servicio es un componente de la aplicación que se ejecuta en segundo plano durante mucho tiempo.
El servicio no es un proceso separado. Está en el mismo proceso que la aplicación. El servicio no es un subproceso y no tiene nada que ver con subprocesos, por lo que no puede manejar directamente operaciones que requieren mucho tiempo. Si coloca operaciones que consumen mucho tiempo directamente en onStartCommand () del Servicio, es fácil provocar ANR. Si hay operaciones que consumen mucho tiempo, debe iniciar un hilo separado para manejarlas.
2. IntentService
IntentService es una clase que hereda de Service y maneja solicitudes asincrónicas. Hay un hilo de trabajo en IntentService para manejar operaciones que requieren mucho tiempo. La tradición de iniciar Igual que el Servicio, al mismo tiempo, cuando se ejecuta la tarea, IntentService se detendrá automáticamente sin que necesitemos controlarlo manualmente. Además, IntentService se puede iniciar varias veces y cada operación que requiere mucho tiempo se ejecutará en el método de devolución de llamada onHandleIntent de IntentService en forma de cola de trabajo. Además, solo se ejecutará un subproceso de trabajo a la vez. el segundo se ejecutará después del primero, y así sucesivamente. (Ejecución en serie)
Además, todas las solicitudes están en un solo subproceso, que no bloquea el subproceso principal de la aplicación (UI Thread) y solo procesa una solicitud a la vez. Entonces, ¿cuáles son los beneficios de utilizar IntentService? En primer lugar, nos ahorramos la molestia de abrir manualmente subprocesos en el Servicio para realizar operaciones que requieren mucho tiempo. En segundo lugar, cuando se completa la operación, no necesitamos detener el Servicio manualmente.
2. Principio de implementación
La esencia de IntentService es utilizar el método Handler y HandlerThread:
Se abre un hilo separado llamado IntentService a través de HandlerThread. >
Cree un controlador interno llamado ServiceHandler
Vincule el controlador interno al subproceso correspondiente a HandlerThread
Páselo a la intención del servicio a través de onStartCommand() e insértelo ingrese a la cola de trabajo por turno y envíelos a onHandleIntent() uno por uno
Utilice onHandleIntent() para procesar las tareas correspondientes a todos los objetos de solicitud de Intent en secuencia