¿Cuál es la diferencia entre Service, Async Task & Thread? Si no me equivoco, todos ellos se utilizan para hacer algunas cosas en segundo plano. Entonces, ¿cómo decidir cuál usar y cuándo?
¿Cuál es la diferencia entre Service, Async Task & Thread? Si no me equivoco, todos ellos se utilizan para hacer algunas cosas en segundo plano. Entonces, ¿cómo decidir cuál usar y cuándo?
Respuestas:
Probablemente ya haya leído la descripción de la documentación sobre ellos, no los repetiré, en su lugar, trataré de responder con mis propias palabras, espero que lo ayuden.
El servicio es como una actividad pero no tiene interfaz de usuario. Probablemente, si desea obtener el clima, por ejemplo, no creará una actividad en blanco para ello, para esto utilizará un Servicio.
Un hilo es un hilo, probablemente ya lo sabes de otra parte. Debe saber que no puede actualizar la interfaz de usuario desde un subproceso. Necesitas usar un controlador para esto, pero sigue leyendo.
Un AsyncTask es un subproceso inteligente que se recomienda utilizar. Inteligente, ya que puede ayudar con sus métodos, y hay tres métodos que se ejecutan en el subproceso de la interfaz de usuario, lo cual es bueno para actualizar los componentes de la interfaz de usuario.
Estoy usando Servicios, AsyncTasks con frecuencia. Hilo menos, o nada en absoluto, ya que puedo hacer casi todo con AsyncTask.
Esta es la respuesta más fácil para su pregunta.
Hilo
es una unidad de ejecución que se ejecuta "en paralelo" al subproceso principal, es un punto importante, no puede actualizar un componente de la interfaz de usuario de ningún subproceso aquí excepto el subproceso principal.
AsyncTask
es un subproceso especial, que le brinda métodos auxiliares para actualizar la interfaz de usuario, por lo que básicamente puede actualizar la interfaz de usuario, incluso AsyncTask se ejecutará en un subproceso en segundo plano. No se requiere que el manejo de la comunicación entre procesos se realice explícitamente.
Servicio
resuelva el problema anterior porque vive separado de la actividad que lo invoca para que pueda continuar ejecutándose incluso cuando la actividad se destruye, se ejecuta en el subproceso principal (tenga cuidado con ANR) use un servicio en segundo plano (extienda IntentService, crea el subproceso de trabajo automáticamente para usted) . El servicio es como una actividad sin interfaz de usuario , es bueno para tareas largas
Poca información más quisiera que alguien me hubiera contado hace unos días
Mi caso de uso es así: tengo un hilo en el espacio global que está conectado a un servidor y una actividad que muestra los resultados. Cuando el usuario presiona el botón de inicio, la Actividad pasa a segundo plano y se inicia un nuevo Servicio. Este servicio lee los resultados del hilo y muestra información en el área de notificación cuando es necesario. No me preocupa que el SO destruya mi Actividad porque sé que mientras el Servicio se esté ejecutando, no destruirá el hilo.
Desde la perspectiva del desarrollador:
Subproceso : se utiliza para ejecutar el conjunto de códigos en paralelo al subproceso principal. Pero no puede manejar la interfaz de usuario dentro del hilo. Para eso necesitas usar Handler
. Hadler funciona como hilo pero también puede manejar la interfaz de usuario.
ASyncTask : se utiliza para manejar las tareas que no puede hacer para trabajar en el hilo principal. Por ejemplo, una solicitud HTTP es un trabajo muy pesado que no se puede manejar en el subproceso principal, por lo que maneja la solicitud HTTP en el ASyncTask
trabajo en paralelo con su subproceso principal de forma asincrónica en segundo plano. eventos.
Servicio : es un proceso en segundo plano. Se emplea cuando tiene que hacer un procesamiento que no tiene ninguna interfaz de usuario asociada.
Service
no necesariamente se ejecutará en segundo plano a menos que lo use IntentService
. Si inició un estándar Service
desde el UiThread, se ejecutará en el UiThread.
Service
que no se ejecutará en un proceso diferente de forma predeterminada, sino en el proceso de la aplicación con los otros componentes. Es mejor decir que Service
se ejecutará en el fondo del hilo que vive dentro.