UIThread es el hilo principal de ejecución de su aplicación. Aquí es donde se ejecuta la mayor parte del código de su aplicación. Todos los componentes de su aplicación (Actividades, Servicios, ContentProviders, BroadcastReceivers) se crean en este hilo, y cualquier llamada del sistema a esos componentes se realiza en este hilo.
Por ejemplo, digamos que su aplicación es una sola clase de actividad. Luego, todos los métodos del ciclo de vida y la mayor parte del código de manejo de eventos se ejecutan en este UIThread. Estos son métodos como onCreate
, onPause
, onDestroy
, onClick
, etc. Además, aquí es donde todos los cambios a la interfaz de usuario están hechos. Cualquier cosa que haga que la IU se actualice o cambie TIENE que suceder en el hilo de la IU.
Para obtener más información sobre los procesos y subprocesos de su aplicación, haga clic aquí.
Cuando generas explícitamente un nuevo hilo para trabajar en segundo plano, este código no se ejecuta en UIThread. Entonces, ¿qué sucede si este hilo en segundo plano necesita hacer algo que cambie la interfaz de usuario? Para esto es runOnUiThread
. En realidad, se supone que debe usar un controlador (consulte el enlace a continuación para obtener 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 colocando el código de modificación de la interfaz de usuario en un objeto Runnable y pasándolo al método runOnUiThread.
Para obtener más información sobre cómo generar hilos de trabajo y actualizar la interfaz de usuario desde ellos, haga clic aquí
Yo personalmente solo uso el runOnUiThread
método en mis Pruebas de Instrumentación. Dado que el código de prueba no se ejecuta en UIThread, debe utilizar este método para ejecutar código que modifica la interfaz de usuario. Entonces, lo uso para inyectar clics y eventos clave en mi aplicación. Luego puedo verificar el estado de la aplicación para asegurarme de que sucedieron las cosas correctas.
Para obtener más información sobre cómo probar y ejecutar código en UIThread, haga clic aquí
AsyncTask
lugar derunOnUiThread
en la mayoría de los casos?AsyncTask
sacarán del hilo principal, al fondo;runOnUiThread()
lo llevará al hilo principal, desde el fondo. Entonces, depende de lo que estés tratando de lograr.Si ejecuta código de bloqueo (por ejemplo, una solicitud Http) en un hilo separado, considere usar AsyncTask . Su
doInBackground
-Método se ejecuta en un hilo separado.AsyncTask
le proporciona métodosonProgressUpdate
yonPostExecute
que están garantizados para ejecutarse en el hilo de la IU .Si necesita actualizaciones de progreso de GUI (por ejemplo, a través de una barra de progreso) llame
publishProgress
adentrodoInBackground
. Esto conduce a una llamada posterioronPublishProgress
que también se garantiza que se ejecutará en el hilo de la interfaz de usuario .onPostExecute
se llama automáticamente después de lasdoInBackground
devoluciones.fuente
Todos los dibujos de la interfaz de usuario, etc., ocurren en un hilo separado. Se llama UIThread. Si desea realizar algún cambio en la interfaz de usuario, debe usar asegúrese de que suceda en el contexto de UIThread. La forma más sencilla de hacerlo es utilizar
runOnUiThread
fuente