Solución integral de Android Handler

============== [ Proceso ] ==============

[1]: Looper.prepare () creará una instancia de Loop en este hilo y creará y mantendrá una cola de mensajes MessageQueue en este hilo. Un hilo corresponde a una sola cola de mensajes.

[2]: Looper.loop () se repite continuamente para leer mensajes en MessageQueue, si no hay ningún mensaje, se bloqueará, y si hay un mensaje, pasará

El controlador envía target.dispathMessage () para enviar un mensaje.

[3]: Al crear un Handler, la instancia de Looper del hilo actual se eliminará y la cola de mensajes de Looper, MessageQueue (), se asociará con ella.

[4]: Cuando el Handler finalmente envía un mensaje a través de sendMessageAtTime (), asignará el destino del Mensaje al Handler mismo, y luego colocará el mensaje en MessageQueue del hilo actual. Cuando Looper.loop () repita para recuperar el mensaje de la cola de mensajes, lo hará Se encontrará el destino correspondiente al mensaje, y luego el destino llamará a dispatchMessage () para distribuir el mensaje. De hecho, dispatchMessage () es un método de Handler, que eventualmente llamará a handlerMessage () para enviar el mensaje al usuario. Este handlerMessage () es nuestro habitual El método de recepción de mensajes anulado al crear la instancia de Handler.

[5]: El principio de Handler (). Post () es el mismo que el de Message, pero en el método dispatchMessage (), primero determinará si el Runnable del Message está vacío. Si está vacío, llame al método handlerMessage y ejecute Runnable si no está vacío. El código dentro.

 

============== [ Pensamiento / Pregunta ] ==============

Pregunta 1  : Loop.loop (), lee datos en un bucle infinito. Si no hay datos, se bloqueará. ¿Por qué no conduce al desarrollo de la aplicación?

                  Debido a que se ejecuta toda la aplicación de Android, muchas funciones se crean sobre la base de Loop. Por ejemplo, las devoluciones de llamada de los métodos del ciclo de vida de Activity están todas bajo el control de Loop.loop (). Si el bucle está bloqueado, la aplicación se detiene. Loop se encarga de leer los mensajes de la cola de mensajes y realizar callbacks para las funciones correspondientes según los mensajes. La devolución de llamada onResume () volverá a llamar a onResume () de la actividad correspondiente. El significado de loop infinite loop es sacar constantemente mensajes de la cola de mensajes para realizar las funciones correspondientes. Lo que realmente causa el bloqueo es que el tiempo de procesamiento del mensaje anterior es demasiado largo, lo que hace que el siguiente mensaje no se procese a tiempo. Si la cola de mensajes está vacía, Loop se bloqueará allí y entrará en el estado de suspensión. En este momento, es en realidad un estado estático de la aplicación sin interacción. Si se ingresa un nuevo evento, como una Actividad desde el fondo hasta el primer plano. Despertará el bucle inactivo, leerá el mensaje de la cola de mensajes y ejecutará la función correspondiente.

 

 

 

 

 

 

 

 

Supongo que te gusta

Origin blog.csdn.net/Leo_Liang_jie/article/details/90479216
Recomendado
Clasificación