¿Cuál es el UiThread de Android (hilo de interfaz de usuario)

¿Puede alguien explicarme qué es exactamente el hilo de UI? En developer.android.com dice acerca de la función runOnUiThread

public final void runOnUiThread (Acción ejecutable)

Desde: Nivel de API 1 Ejecuta la acción especificada en el subproceso de la interfaz de usuario. Si el hilo actual es el hilo de UI, entonces la acción se ejecuta inmediatamente. Si el hilo actual no es el hilo de la interfaz de usuario, la acción se publica en la cola de eventos del hilo de la interfaz de usuario.

¿El subproceso de la interfaz de usuario significa que se ejecutará cada vez que la actividad sea empujada al fondo por alguna actividad de la interfaz de usuario, como llamadas entrantes o atenuación de la pantalla, etc.? Si no, ¿qué incluye exactamente el hilo de la interfaz de usuario?

Gracias

    UIThread es el hilo principal de ejecución de su aplicación. Aquí es donde se ejecuta la mayor parte del código de la aplicación. Todos los componentes de su aplicación (Actividades, Servicios, ContentProviders, BroadcastReceivers) se crean en este hilo, y cualquier llamada al sistema a esos componentes se realiza en este hilo.

    Por ejemplo, supongamos que su aplicación es una clase de actividad única. Luego, todos los métodos del ciclo de vida y la mayoría del código de manejo de eventos se ejecuta en este UIThread. Estos son métodos como onCreate , onPause , onDestroy , onClick , etc. Además, aquí es donde se realizan todas las actualizaciones de la interfaz de usuario. Todo lo que hace que la interfaz de usuario se actualice o cambie tiene que suceder en el hilo de la interfaz de usuario.

    Para obtener más información sobre los Procesos e Hilos de su aplicación, haga clic aquí.

    Cuando genera explícitamente un nuevo hilo para hacer el trabajo en segundo plano, este código no se ejecuta en UIThread. Entonces, ¿qué sucede si este hilo de fondo necesita hacer algo que cambie la UI? Esto es para lo que es runOnUiThread . En realidad, se supone que debes usar un controlador (ver el enlace a continuación para obtener más información sobre esto). Proporciona a estos hilos de fondo la capacidad de ejecutar código que puede modificar la UI. Lo hacen colocando el código de modificación de UI en un objeto Runnable y pasándolo al método runOnUiThread.

    Para obtener más información sobre el desarrollo de hilos de trabajo y actualizar la interfaz de usuario de ellos, haga clic aquí.

    Personalmente, solo uso el método runOnUiThread en mis Pruebas de Instrumentación. Como el código de prueba no se ejecuta en UIThread, debe usar este método para ejecutar código que modifique la UI. Por lo tanto, lo uso para inyectar eventos de clic y clave en mi aplicación. Luego puedo verificar el estado de la aplicación para asegurarme de que ocurrieron las cosas correctas.

    Para obtener más información sobre probar y ejecutar código en UIThread, haga clic aquí.

    Si ejecuta el código de locking (por ejemplo, una solicitud Http) en un subproceso separado, considere usar AsyncTask . Su doInBackground -Method se ejecuta en un subproceso separado. AsyncTask proporciona los métodos onProgressUpdate y onPostExecute que están garantizados para ejecutarse en el hilo de UI .

    Si necesita actualizaciones de progreso de la GUI (por ejemplo, a través de una publishProgress progreso), llame a publishProgress dentro de doInBackground . Esto lleva a una llamada posterior de onPublishProgress .

    onPostExecute se onPostExecute automáticamente después de que devuelve doInBackground .

    Todos los dibujos UI, etc. ocurren en un hilo separado. Se llama UIThread. Si desea realizar algún cambio en la UI, debe asegurarse de que ocurra en el contexto de UIThread. La forma más sencilla de hacerlo es hacer uso de runOnUiThread