¿Qué es el UiThread de Android (subproceso de interfaz de usuario)

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

Public final void runOnUiThread (acción Runnable)

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

¿El hilo de interfaz de usuario significa que esto se ejecutará cada vez que la actividad se empuja el fondo por alguna actividad ui como la llamada entrante o pantalla de oscurecimiento, etc? Si no, ¿qué incluye exactamente el hilo de interfaz de usuario?

Gracias

El UIThread es el hilo principal de ejecución de su aplicación. Aquí es donde se ejecuta la mayor parte de su código de aplicación. En este subproceso se crean todos los componentes de la aplicación (Actividades, Servicios, Proveedores de contenido, BroadcastReceivers) y se realizan en este subproceso llamadas de sistema a esos componentes.

Por ejemplo, supongamos que su aplicación es una sola clase de actividad. A continuación, todos los métodos de ciclo de vida y la mayoría de su código de manejo de eventos se ejecutan en este UIThread. Estos son métodos como onCreate , onPause , onDestroy , onClick , etc. Además, 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 subproceso de interfaz de usuario.

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

Cuando explícitamente generar un nuevo hilo para hacer el trabajo en segundo plano, este código no se ejecuta en el UIThread. Entonces, ¿qué pasa si este hilo de fondo necesita hacer algo que cambie la interfaz de usuario? Esto es para lo que runOnUiThread . En realidad se supone que debe usar un manejador (vea el enlace a continuación para más información sobre esto). Proporciona a estos subprocesos de fondo la capacidad de ejecutar código que puede modificar la interfaz de usuario. Lo hacen poniendo el código modificando UI en un objeto Runnable y pasándolo al método runOnUiThread.

Para más información sobre los hilos de trabajo de desove y la actualización de la interfaz de usuario de ellos haga clic aquí

Personalmente, sólo uso el método runOnUiThread en mis pruebas de instrumentación. Dado que el código de prueba no se ejecuta en el UIThread, debe utilizar este método para ejecutar código que modifique la interfaz de usuario. Por lo tanto, lo uso para inyectar clics y eventos clave en mi aplicación. Puedo entonces comprobar el estado de la aplicación para cerciorarse de las cosas correctas sucedidas.

Para más información sobre pruebas y ejecución de código en la UIThread haga clic aquí

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

Si necesita actualizaciones de progreso 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 llama automáticamente después de doInBackground devuelve.

Todos los dibujos de UI, etc., ocurren en un hilo separado. Su llamado el UIThread. Si desea realizar cualquier cambio en la UI u debe utilizar asegúrese de que sucede en el contexto de UIThread. La manera más fácil de hacerlo es hacer uso de runOnUiThread

  • Animación de una vista mientras que ListView no está funcionando
  • ¿Por qué sólo el subproceso de interfaz de usuario en Android puede actualizar la interfaz de usuario?
  • DoInBackground llama a AsyncTask entonces duerme bloques UI Thread
  • No se puede crear el controlador dentro de hilo que no ha llamado Looper.prepare ()
  • ¿Es posible usar AsyncTask en una clase de servicio?
  • ¿Es una buena práctica crear AsyncTask anónima para paralelo pequeño proceso de congelación conocido?
  • Admob: Cómo cargar AdRequest fuera de UI Thread?
  • Android ViewPager cambia automáticamente la página
  • Servicio de Android e hilo de la interfaz de usuario
  • Android - llamando al hilo de ui del hilo de trabajo
  • No se puede crear el controlador dentro de hilo que no ha llamado Looper.prepare () 3
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.