programacion - manual de android en pdf
Asynctask vs Thread en android (5)
En la interfaz de usuario, para realizar algunos trabajos de fondo, utilicé un Thread
separado. Pero como sugirieron otros, ahora estoy usando AsyncTask
.
¿Cuál es la principal diferencia entre un Thread
y un AsyncTask
?
¿En qué situación, debería usar un Thread
o un AsyncTask
?
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.
Para más información, visite Here
Para tareas de larga ejecución o intensivas en CPU, existen básicamente dos formas de hacerlo: hilos de Java y AsyncTask nativa de Android.
Ninguno de los dos es necesariamente mejor que el otro, pero saber cuándo usar cada llamada es esencial para aprovechar el rendimiento del sistema para su beneficio.
Use AsyncTask para:
- Operaciones de red simples que no requieren la descarga de una gran cantidad de datos
- Tareas vinculadas a disco que pueden tardar más de unos pocos milisegundos
Use hilos de Java para:
- Operaciones de red que implican cantidades moderadas a grandes de datos (ya sea cargando o descargando)
- Tareas de CPU alta que deben ejecutarse en segundo plano
- Cualquier tarea en la que desee controlar el uso de la CPU en relación con el hilo de la GUI
Y hay muchos buenos recursos en Internet que pueden ayudarlo a:
http://www.vogella.com/articles/AndroidBackgroundProcessing/article.html http://www.mergeconflict.net/2012/05/java-threads-vs-android-asynctask-which.html
Si usa subprocesos Java, debe manejar los siguientes requisitos en su propio código:
Sincronización con el hilo principal si publica resultados en la interfaz de usuario
Sin valor predeterminado para cancelar el hilo
Sin agrupamiento de subprocesos predeterminado
Sin valores predeterminados para manejar los cambios de configuración en Android
Hilo:
Thread
debe usar para separar las operaciones de ejecución larga del hilo principal para mejorar el rendimiento. Pero no se puede cancelar elegantemente y no puede manejar los cambios de configuración de Android. No puede actualizar la interfaz de usuario desde el Thread
.
AsyncTask
se puede usar para manejar elementos de trabajo de menos de 5 ms de duración. Con AsyncTask
, puede actualizar la interfaz de usuario a diferencia del Thread
java. Pero muchas tareas de larga ejecución ahogarán el rendimiento.
Tienes pocas alternativas más para ambos.
HandlerThread / Handler y ThreadPoolExecutor
Consulte la publicación a continuación para más detalles:
Hilo
- Tarea larga en general
- Invocar por el método thread.start ()
- Activado desde cualquier hilo
- Se ejecuta en su propio hilo
- La gestión / código de la secuencia manual puede ser difícil de leer
AsyncTask
- Pequeña tarea que tiene que comunicarse con el hilo principal
- Invocar por el método excute ()
- Desencadenado desde el hilo principal
- Se ejecuta en el hilo de trabajo
- Debe ser ejecutado y creado a partir del hilo principal