android - programacion - Diferencia entre el servicio, la tarea asincrónica y el hilo?
manual de programacion android pdf (7)
Esta es la respuesta más fácil para su pregunta
Hilo
es una unidad de ejecución que ejecuta "paralelo" al hilo principal es un punto importante; aquí no se puede actualizar un componente de interfaz de usuario desde el hilo principal.
AsyncTask
es para una tarea corta porque está vinculada a la actividad del host, por ejemplo, si crea una AsyncTask que va a extraer datos de un servidor (NO HAGA ESTO) cuando gira el teléfono y la actividad se vuelve a crear, la AsyncTask será recreado.
Servicio
resuelve el problema anterior porque vive separado de la actividad que lo invoca para que pueda seguir ejecutándose incluso cuando la actividad se destruye, se ejecuta en el hilo principal (cuidado con ANR) utiliza un servicio en segundo plano (extiende IntentService crea el hilo de trabajo automáticamente para ti) . El servicio es como una actividad sin UI , es bueno para una tarea larga
Cuál es la diferencia entre el servicio, la tarea asincrónica y el hilo. Si no estoy equivocado, todos ellos están acostumbrados a hacer algunas cosas en segundo plano. Entonces, ¿cómo decidir qué usar y cuándo?
Pocos más información que desearía que alguien me hubiera dicho hace unos días:
- Puede compartir variables globales, como subprocesos, entre Actividades y Servicios.
- Su aplicación, junto con todas sus variables globales, no desaparecerá mientras exista una Actividad o un Servicio.
- Si tiene una instancia de un Servicio en su aplicación y el SO necesita recursos, primero mata sus Actividades, pero mientras exista el Servicio, el SO no borrará su aplicación junto con sus variables globales.
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 al segundo plano y se inicia un nuevo servicio. Este servicio luego lee los resultados del hilo y muestra información en el área de notificación cuando sea necesario. No me preocupa que el SO destruya mi Actividad porque sé que mientras el Servicio se ejecute no destruirá el hilo.
Probablemente ya hayas leído la descripción de la documentación sobre ellos, no los repetiré, en su lugar intentaré responder con mis propias palabras, espero que te ayuden.
El servicio es como una actividad pero no tiene interfaz. Probablemente, si quiere buscar el clima, por ejemplo, no creará una actividad en blanco, para esto utilizará un Servicio.
Un hilo es un hilo, probablemente ya lo sepas por otra parte. Necesita saber que no puede actualizar la interfaz de usuario desde un subproceso. Necesitará usar un Manejador para esto, pero siga leyendo.
Un AsyncTask es un hilo inteligente que se recomienda utilizar. Es inteligente ya que puede ayudarlo con sus métodos, y hay tres métodos que se ejecutan en el subproceso de interfaz de usuario, que es bueno para actualizar los componentes de la interfaz de usuario.
Estoy usando servicios, AsyncTasks con frecuencia. Rosca menos, o nada, ya que puedo hacer casi todo con AsyncTask.
el servicio es como una tarea que consume mucho tiempo, pero la tarea Async nos permite realizar operaciones largas / en segundo plano y mostrar su resultado en el subproceso de la interfaz de usuario sin tener que manipular los subprocesos.
Desde la perspectiva del desarrollador:
Subproceso : se utiliza para ejecutar el conjunto de códigos paralelamente al hilo principal. Pero no puedes manejar la UI dentro del hilo. Para eso necesitas usar Handler
. Hadler funciona como hilo, pero también puede manejar la interfaz de usuario.
ASyncTask : se usa para manejar aquellas tareas que no puede realizar para trabajar en el hilo principal. Por ejemplo, una solicitud HTTP es un trabajo muy pesado que no puede realizarse en el hilo principal, por lo que maneja la solicitud HTTP en ASyncTask
Funciona paralelamente con su hilo principal Asincrónicamente en el fondo. Tiene pocos métodos de devolución de llamada que se invocan en su eventos correspondientes.
Servicio : es un proceso en segundo plano. Se emplea cuando tiene que hacer un procesamiento que no tiene ninguna IU asociada.
Hilo
Un hilo es una unidad de ejecución concurrente. Tiene su propia pila de llamadas. Hay dos métodos para implementar subprocesos en aplicaciones.
Uno proporciona una nueva clase que amplía Thread y reemplaza su método run (). El otro proporciona una nueva instancia de Thread con un objeto Runnable durante su creación. Un hilo se puede ejecutar llamando a su método de "inicio". Puede establecer la "Prioridad" de un hilo llamando a su método "setPriority (int)".
Se puede usar un hilo si no tiene efecto en la parte UI. Por ejemplo, está llamando a algún servicio web o descargando algunos datos, y después de la descarga, lo está mostrando en su pantalla. Entonces necesitas usar un Handler con un Thread y esto complicará tu aplicación para manejar todas las respuestas de Threads.
Un controlador le permite enviar y procesar mensajes y objetos ejecutables asociados con MessageQueue de un hilo. Cada hilo tiene cada cola de mensajes. (Como una Lista de tareas pendientes), y el hilo tomará cada mensaje y lo procesará hasta que la cola de mensajes esté vacía. Entonces, cuando el controlador se comunica, simplemente le da un mensaje al hilo de la persona que llama y esperará a procesarlo.
Si usa subprocesos de Java, necesita manejar los siguientes requisitos en su propio código:
- Sincronización con el hilo principal si publica resultados posteriores en la interfaz de usuario Sin configuración predeterminada para cancelar el hilo Sin agrupamiento predeterminado de subprocesos Sin configuración predeterminada para controlar los cambios de configuración en Android
AsyncTask
AsyncTask permite el uso adecuado y fácil del subproceso de interfaz de usuario. Esta clase permite realizar operaciones en segundo plano y publicar resultados en el subproceso de UI sin tener que manipular subprocesos y / o controladores. Una tarea asíncrona se define mediante un cálculo que se ejecuta en un subproceso en segundo plano y cuyo resultado se publica en el subproceso de la interfaz de usuario.
AsyncTask pasará por las siguientes 4 etapas:
onPreExecute ()
Invocado en el subproceso de interfaz de usuario antes de que se ejecute la tarea
doInbackground (Params ..)
Invocado en el hilo de fondo inmediatamente después de onPreExecute () termina de ejecutarse.
onProgressUpdate (Progreso ...)
Invocado en el hilo de UI después de una llamada a publishProgress (Progress ...).
onPostExecute (Resultado)
Invocado en el hilo de la interfaz de usuario una vez que finaliza el cálculo de fondo.
¿Por qué deberías usar AsyncTask?
Fácil de usar para un hilo UI. (Por lo tanto, úselo cuando el hilo de la persona que llama es un hilo de interfaz de usuario). No es necesario manipular manipuladores.
Service A Service es un contexto similar a Activity pero no tiene GUI.
Importante : ¡un servicio no se ejecuta en un nuevo hilo!
Lea sobre el Service y también consulte Cómo ejecutar siempre un servicio en segundo plano
En resumen, el servicio para time consuming tasks
, AsyncTask para time consuming tasks
de short-lived tasks
, el subproceso es una standard java construction
para subprocesos.