Red de conocimiento informático - Computadora portátil - Detalles de los controladores en Android y en qué se diferencian de los hilos

Detalles de los controladores en Android y en qué se diferencian de los hilos

Android proporciona controladores y Loopers para la comunicación entre subprocesos. Los controladores son primero en entrar, primero en salir (FIFO) y la clase Looper se utiliza para gestionar el intercambio de mensajes entre objetos en un hilo específico.

Looper: un hilo puede generar un objeto Looper, que es responsable de gestionar el MessageQueue en el hilo.

Handler: puede construir un objeto controlador para comunicarse con Looper para enviar nuevos mensajes a la cola de mensajes o para recibir mensajes eliminados por Looper de la cola de mensajes.

Cola de mensajes: se utiliza para guardar los mensajes introducidos por los hilos.

Subproceso: UIthread suele ser el subproceso principal y Android creará una cola de mensajes para él al iniciar el programa.

1. El controlador crea un mensaje

Cada mensaje debe ser procesado por un controlador específico. Esto se puede lograr creando un mensaje a través de un controlador. grupo de mensajes introducido en . Si hay un mensaje en el grupo, el controlador lo obtiene directamente del grupo; de lo contrario, el controlador reinicia una instancia de mensaje. La ventaja de utilizar un grupo de mensajes es que cuando un mensaje no se utiliza, no se recolectará como basura, sino que se colocará en el grupo de mensajes para su uso la próxima vez que el controlador cree un mensaje. El grupo de mensajes mejora la tasa de reutilización de los objetos de mensajes y reduce la cantidad de recolecciones de basura del sistema. El proceso de creación del mensaje se muestra en la figura.

2. El controlador envía un mensaje

Cuando el hilo principal de la interfaz de usuario inicializa el primer controlador, crea un Looper a través de ThreadLocal, que corresponde al hilo principal de la interfaz de usuario. El propósito de usar ThreadLocal es garantizar que cada hilo solo cree un Looper único, luego, cuando otros controladores se inicialicen, obtendrán directamente el Looper creado por el primer controlador, y cuando el Looper se inicialice, creará un MessageQueue, es decir, Message. cola. La relación entre el hilo principal, el bucle de mensajes y la cola de mensajes es 1:1:1.

El proceso de inicialización del controlador, Looper y MessageQueue es como se muestra en la figura:

El controlador contiene referencias a la cola de mensajes MessageQueue y al bucle de mensajes Looper del hilo principal de la interfaz de usuario. y el hilo secundario puede enviar un mensaje a la cola de mensajes del hilo de la interfaz de usuario a través de un controlador.

2.

3. El controlador procesa el mensaje.

El hilo principal de la interfaz de usuario consulta la cola de mensajes UI_MQ a través del bucle Looper. Eliminará el mensaje de la cola. Primero analiza el mensaje, determina el controlador correspondiente al mensaje en función de los parámetros del mensaje y luego distribuye el mensaje al controlador especificado para su procesamiento.

El flujo de comunicación entre el subproceso secundario y el subproceso principal de la interfaz de usuario a través del controlador y Looper se muestra en la figura.