Asynctask vs hilo en android

En IU, deseo hacer un trabajo de fondo. Para esto utilicé un hilo separado. Pero como han sugerido otros, ahora estoy usando AsyncTask.
¿Cuál es la diferencia principal entre un Thread y un AsyncTask?
¿En qué escenario debo usar un Thread o un AsyncTask?

5 Solutions collect form web for “Asynctask vs hilo en android”

Para tareas de larga ejecución o con uso intensivo de la CPU, hay básicamente dos maneras de hacerlo: los subprocesos Java y AsyncTask nativo de Android.

Ninguno es necesariamente mejor que el otro, pero saber cuándo usar cada llamada es esencial para aprovechar el rendimiento del sistema para su beneficio.

Utilice AsyncTask para:

  1. Operaciones de red sencillas que no requieren la descarga de una gran cantidad de datos
  2. Tareas relacionadas con el disco que pueden tardar más de unos pocos milisegundos

Utilice los subprocesos Java para:

  1. Operaciones de red que involucran cantidades moderadas o grandes de datos (ya sea cargando o descargando)
  2. Tareas de alta CPU que deben ejecutarse en segundo plano
  3. Cualquier tarea en la que desee controlar el uso de la CPU en relación con el subproceso de GUI

Y hay un montón de buenos recursos a través de Internet que pueden ayudarle:

http://www.vogella.com/articles/AndroidBackgroundProcessing/article.html http://www.mergeconflict.net/2012/05/java-threads-vs-android-asynctask-which.html

Si usa hilos Java, debe manejar los siguientes requisitos en su propio código:

Sincronización con el hilo principal si devuelve los resultados a la interfaz de usuario

No hay ningún valor predeterminado para cancelar el subproceso

No hay agrupación de subprocesos predeterminada

No hay ningún valor predeterminado para gestionar los cambios de configuración en Android

Hilo

  • Larga tarea en general
  • Método invoke by thread.start ()
  • Desencadenado desde cualquier hilo
  • Se ejecuta en su propio hilo
  • El manejo manual de hilos / código puede resultar difícil de leer

AsyncTask

  • Pequeña tarea tener que comunicarse con el hilo principal
  • Invocar mediante el método excute ()
  • Desencadenado desde el hilo principal
  • Se ejecuta en el hilo de trabajo
  • Debe ser ejecutado y creado a partir del subproceso principal

Hilo

Un subproceso es una unidad concurrente de ejecución. Tiene su propia pila de llamadas. Hay dos métodos para implementar subprocesos en las aplicaciones.

Uno es proporcionar una nueva clase que extiende Thread y sobreescribir su método run (). La otra es proporcionar una nueva instancia de Thread con un objeto Runnable durante su creación. Un hilo puede ejecutarse llamando a su método "start". Puede establecer la "Prioridad" de un hilo llamando a su método "setPriority (int)".

Un hilo se puede utilizar si no tiene ningún efecto en la parte de interfaz de usuario. Por ejemplo, está llamando a algún servicio web o descargar algunos datos y, después de descargarlo, lo está mostrando en su pantalla. A continuación, debe utilizar un controlador con un hilo y esto hará que su aplicación complicada para manejar todas las respuestas de hilos.

Un controlador le permite enviar y procesar mensajes y objetos ejecutables asociados con MessageQueue de un subproceso. Cada subproceso 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. Por lo tanto, cuando el Handler se comunica, sólo da un mensaje al hilo de la persona que llama y esperará a procesar.

Si utiliza hilos Java, entonces necesita manejar los siguientes requisitos en su propio código:

Sincronización con el subproceso principal si devuelve los resultados a la interfaz de usuario Sin valor predeterminado para cancelar el subproceso No hay subproceso de subprocesamiento predeterminado No hay ningún método predeterminado para gestionar los cambios de configuración en Android

AsyncTask

AsyncTask permite el uso adecuado y sencillo del subproceso de interfaz de usuario. Esta clase permite realizar operaciones de fondo y publicar resultados en el subproceso de interfaz de usuario sin tener que manipular subprocesos y / o controladores. Una tarea asincrónica se define por un cálculo que se ejecuta en un subproceso de fondo y cuyo resultado se publica en el subproceso de interfaz de usuario.

AsyncTask pasará por las siguientes 4 etapas:

OnPreExecute ()

Se invoca en el subproceso de la interfaz de usuario antes de ejecutar la tarea

DoInbackground (Params ..)

Se invoca en el subproceso de fondo inmediatamente después de que onPreExecute () finaliza la ejecución.

OnProgressUpdate (Progreso ..)

Se invoca en el subproceso de interfaz de usuario después de una llamada a publishProgress (Progreso …).

OnPostExecute (Resultado)

Se invoca en el subproceso de interfaz de usuario después de finalizar el cálculo de fondo.

¿Por qué debería usar AsyncTask?

Fácil de usar para un hilo de interfaz de usuario. (Por lo tanto, utilizarlo cuando el hilo de llamada es un hilo de interfaz de usuario).

No hay necesidad de manipular Handlers.

Para más información visite aquí

Thread o AsyncTask deben utilizar para separar las operaciones de ejecución largas del subproceso principal para mejorar el rendimiento.

HandlerThread y Handler ofrece una mejor alternativa.

HandlerThread:

Clase práctica para iniciar un nuevo hilo que tiene un looper. El looper puede utilizarse para crear clases de manejadores.

Entrenador de animales:

Un controlador le permite enviar y procesar mensajes y objetos ejecutables asociados con MessageQueue de un subproceso. Cada instancia de Handler se asocia con un solo subproceso y la cola de mensajes del subproceso. Cuando crea un nuevo Handler, está enlazado a la fila / cola de mensajes del subproceso que lo está creando. A partir de ese momento, entregará mensajes y ejecutables a esa cola de mensajes y los ejecutará a medida que salgan del mensaje cola.

Una vez que inicie Thread o AsyncTask , no se puede reutilizar y volver a ejecutar. Si crea varios Threads / AsyncTasks, tiene la sobrecarga de la creación del hilo y la gestión del ciclo de vida del hilo en consecuencia.

Sin embargo, con la ayuda de HandlerThread y Handler (que utiliza Looper ), puede enviar múltiples tareas de los trabajadores sin desventajas de gastos generales de rendimiento. Puede reutilizar Handler para enviar varias tareas a diferencia de Thread/AsyncTask

Echa un vistazo al código de ejemplo en esta publicación para obtener más detalles:

Ejecutar código en el hilo principal desde otro hilo

  • Android: actualiza el mapa de bits del hilo del temporizador
  • Android: puede AsyncTask devolver en otro hilo de rosca de interfaz de usuario?
  • Para forzar la cancelación AsyncTask no debería el indicador periódicamente marcado en doInBackground ser volátil?
  • ¿Cómo se utiliza un TimerTask para ejecutar un hilo?
  • Actualizar interfaz de usuario mientras trabaja en el fondo
  • Inflar una vista en un subproceso de fondo
  • ¿Tiene soporte para Android?
  • Cargar anuncio (adMob) en el subproceso de fondo
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.