Si miramos el código fuente, veremos AsyncTask
yHandler
está escrito puramente en Java. (Sin embargo, hay algunas excepciones. Pero ese no es un punto importante)
Entonces no hay magia en AsyncTask
o Handler
. Estas clases nos hacen la vida más fácil como desarrolladores.
Por ejemplo: si el Programa A llama al método A (), el método A () podría ejecutarse en un hilo diferente con el Programa A. Podemos verificarlo fácilmente mediante el siguiente código:
Thread t = Thread.currentThread();
int id = t.getId();
¿Por qué deberíamos usar un nuevo hilo para algunas tareas? Puedes buscarlo en google. Muchas razones, por ejemplo: levantar pesados, trabajos de larga duración.
Así que, ¿cuáles son las diferencias entre Thread
, AsyncTask
y Handler
?
AsyncTask
y Handler
están escritos en Java (internamente usan a Thread
), por lo que todo lo que podemos hacer con Handler
o AsyncTask
, podemos lograrlo Thread
también.
¿Qué puede Handler
y AsyncTask
realmente ayudar?
La razón más obvia es la comunicación entre el hilo del llamador y el hilo del trabajador. ( Subproceso de llamada : un subproceso que llama al subproceso de trabajo para realizar algunas tareas. Un subproceso de llamada no necesariamente tiene que ser el subproceso de interfaz de usuario). Por supuesto, podemos comunicarnos entre dos hilos de otras maneras, pero existen muchas desventajas (y peligros) debido a la seguridad del hilo.
Por eso debemos usar Handler
y AsyncTask
. Estas clases hacen la mayor parte del trabajo por nosotros, solo necesitamos saber qué métodos anular.
La diferencia entre Handler
y AsyncTask
es: usar AsyncTask
cuando el hilo de la persona que llama es un subproceso de interfaz de usuario . Esto es lo que dice el documento de Android:
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
Quiero enfatizar dos puntos:
1) Uso fácil del hilo de la interfaz de usuario (por lo tanto, usar cuando el hilo de la persona que llama es el hilo de la interfaz de usuario).
2) No es necesario manipular manejadores. (significa: puede usar Handler en lugar de AsyncTask, pero AsyncTask es una opción más fácil).
Hay muchas cosas en esta publicación que aún no he dicho, por ejemplo: qué es UI Thread o por qué es más fácil. Debe conocer algunos métodos detrás de cada clase y usarlos, comprenderá completamente la razón.
@: cuando lea el documento de Android, verá:
El controlador le permite enviar y procesar mensajes y objetos ejecutables asociados con MessageQueue de un hilo
Esta descripción puede parecer extraña al principio. Solo necesitamos entender que cada hilo tiene cada cola de mensajes (como una lista de tareas), y el hilo tomará cada mensaje y lo hará hasta que la cola de mensajes esté vacía (al igual que terminamos nuestro trabajo y nos acostamos). Así que cuandoHandler
comunica, solo le da un mensaje al hilo de la persona que llama y esperará para procesar.
¿Complicado? Solo recuerde que Handler
puede comunicarse con el hilo de la persona que llama de forma segura.