para - manual de programacion android pdf
Diferencia entre AsyncTask y Thread/Runnable (4)
Diferencias clave:
AsyncTask es una tarea asíncrona definida por un cálculo que se ejecuta en un subproceso de fondo y cuyo resultado se publica en el subproceso de la interfaz de usuario. No se puede hacer con el hilo normal a menos que use el
Handler
en el hilo de la interfaz de usuario y publique un mensaje O directamente cambie el atributo de un objeto implementando la sincronización adecuada.Según lo recomendado por la guía del desarrollador con respecto al rendimiento del hilo ,
Hay que tener en cuenta algunos aspectos importantes del rendimiento. Primero, de forma predeterminada, una aplicación empuja todos los objetos AsyncTask que crea en un solo hilo. Por lo tanto, se ejecutan en forma serial y, al igual que con el hilo principal, un paquete de trabajo especialmente largo puede bloquear la cola. Por este motivo, le sugerimos que solo use AsyncTask para manejar los elementos de trabajo con una duración inferior a 5 ms. .
Pero el Thread normal se puede utilizar para tareas de larga ejecución.
Los HandlerThread no son muy útiles para Android a diferencia de HandlerThread , que ha sido proporcionado por el marco de Android.
Clase práctica para iniciar un nuevo hilo que tiene un looper. El looper se puede usar para crear clases de manejador. Tenga en cuenta que start () todavía debe ser llamado.
Consulte la siguiente publicación para saber más detalles:
Tengo una pregunta que me desconcierta.
Imagina que quiero hacer algo en otro hilo, como buscar cosas de GPS / ubicación, que, como se recomienda en los documentos del SDK, deben usar un hilo de fondo.
Así que aquí está la pregunta: ¿Cuál es la diferencia entre
Creando un
Thread
en segundo plano a través deAsyncTask
ANDCrear
Thread thread1 = new Thread(new Runnable()
... e implementarrun()
?
También tenga en cuenta que a partir de Android v4.04, no puede tener más de una AsyncTasks
a la vez, a menos que pierda la compatibilidad con versiones inferiores. Estar atentos
Un inconveniente obvio para la clase AsyncTask es que después de que se ejecutan las asynctasks de Android 3.0 de acuerdo con la secuencia de la hora de inicio. es decir, las tareas se ejecutan una por una, a menos que ejecute la tarea llamando a ''executeOnExecutor (Executors.newCachedThreadPool ())''. Este método crearía tu propio grupo de hilos.
AsyncTask es una clase de conveniencia para realizar un trabajo en un nuevo subproceso y utilizar los resultados en el subproceso desde el que se llamó (normalmente el subproceso de la interfaz de usuario) cuando haya terminado. Es solo un contenedor que usa un par de runnables pero maneja todas las complejidades de crear el hilo y manejar los mensajes entre los hilos.
AsyncTask permite el uso correcto y fácil del hilo de la interfaz de usuario. Esta clase permite realizar operaciones en segundo plano y publicar resultados en el subproceso de la interfaz de usuario sin tener que manipular subprocesos y / o controladores.
AsyncTask está diseñado para ser una clase auxiliar en torno a Thread y Handler y no constituye un marco de subprocesos genérico. AsyncTasks debería usarse idealmente para operaciones cortas (a lo sumo unos segundos). Si necesita mantener los subprocesos en funcionamiento durante largos períodos de tiempo, se recomienda encarecidamente que utilice las diversas API proporcionadas por java.util.concurrent pacakge, como Ejecutor, ThreadPoolExecutor y FutureTask.
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. Una tarea asíncrona se define mediante 3 tipos genéricos, llamados Parámetros, Progreso y Resultado, y 4 pasos, llamados onPreExecute, doInBackground, onProgressUpdate y onPostExecute.
La interfaz Runnable encuentra en el núcleo de los subprocesos de Java. La interfaz Runnable debe ser implementada por cualquier clase cuyas instancias estén destinadas a ser ejecutadas por un hilo.
También si cito de este blog :
si necesita una codificación SIMPLE use AsyncTask y si necesita SPEED, use el tradicional java Thread.