Colección de citas famosas - Slogan de motivación - Subproceso de interfaz de usuario de Android

Subproceso de interfaz de usuario de Android

Pensamiento:

Primero debes comprender las dos preguntas siguientes.

1. Como su nombre lo indica, el hilo de la interfaz de usuario es el hilo que actualiza la interfaz de usuario.

2. La interfaz de usuario se actualiza en un solo hilo.

1. Para Actividad, el hilo de la interfaz de usuario es su hilo principal.

2. Para View, el hilo de la interfaz de usuario es el hilo que crea ViewRootImpl.

Puedes crear objetos ViewRootImpl a través de sesiones internas de WindowManager.

Bien, hablemos de los puntos clave. Levantemos lentamente el velo.

Podemos abordarlo desde varios aspectos.

Es posible que todos hayamos utilizado runOnUiThread. Ahora veamos la implementación del código fuente.

Puedes ver esto en el código fuente de arriba.

Si no es el hilo de la interfaz de usuario, use el controlador para cambiar al hilo donde se encuentra el controlador. Si es el hilo de la interfaz de usuario, llame al método de ejecución directamente.

Crear actividades:

1. Creación de actividades: gadget. Nueva actividad

2. Crear contexto: contexto implícito appcontextcreatebasecontextforactivity(r).

Normalmente utilizamos este método para obtener los valores de ancho y alto de vista en onCreate. O realice algunas operaciones que requieren mucho tiempo en el hilo secundario y luego publique cortes en el hilo donde se encuentra la vista correspondiente para dibujar la operación de la interfaz de usuario. Entonces el hilo correspondiente es el hilo de la interfaz de usuario.

¿Entonces este hilo de la interfaz de usuario debe ser el hilo principal?

Date prisa y sigue buscando. Su vista de código fuente: post

MAttachInfo se asigna en despachoAttachedToWindow, que se asigna cuando se crea viewrootimpl, por lo que es el hilo que crea viewrootimpl.

¿Cuándo está vacía la información adjunta? Antes de crear ViewRoottimpl, ViewRoottimpl se crea después de "onResume". Entonces, si accede a View.post en Activity's onCreate, AttachInfo está vacío.

getRunQueue() cuando AttachInfo == nulo. Se llamará a la publicación (acción).

Finalmente, este Runnable se almacena en caché en HandlerActionQueue.

Hasta que se llame a diskeattachedtowindow(mattachinfo, 0) en performTraversals de ViewRootImpl, manejaremos el Runnable en RunQueue();

Hagamos un dibujo para entender este proceso.

A veces, cuando vamos a subprocesos para operar la interfaz de usuario (como: requestLayout), a menudo veremos el siguiente registro de errores:

Solo el hilo original que creó la vista La jerarquía puede tocarlo. Ver

¿Por qué informas este error?

Solo el hilo original que creó la jerarquía de vistas puede acceder a sus vistas.

En otras palabras, el hilo que opera la UI debe ser el mismo hilo que el hilo creado por ViewRootImpl, y no solo el hilo principal puede actualizar la UI.

¿Hilo creado por ViewRootImpl? Entonces, ¿dónde se crea ViewRootImpl?

Como se puede ver en la figura anterior, la creación de viewrootimpl comienza desde HandleResumeActivity de ActivityThread y continúa hasta la creación de viewrootimpl. Esto significa que los subprocesos de UI correspondientes a viewrootimpl y ActivityThread están en el mismo subproceso. es el hilo principal.

Bien, a través de la explicación anterior, creo que puedes responder las preguntas anteriores tú mismo~