2009-12-03 10 views

Respuesta

22

Activity.runOnUiThread, como su nombre lo indica, ejecutará Runnable en el hilo que actualmente es responsable de la interfaz de usuario. Por lo tanto, si tiene una tarea intensiva de CPU, puede hacer que la UI no responda por un corto período de tiempo. Por el contrario, Handler proporciona una forma de crear un hilo, ejecutar un código y notificar a la interfaz de usuario cuando haya terminado (es decir, Handler.sendMessage).

la documentación para el estado Handler esto mejor que puedo:

Cuando se crea un proceso para su aplicación , su hilo principal es dedicada a la ejecución de una cola de mensajes que se encarga de la gestión de la objetos de aplicación de nivel superior (actividades, receptores de difusión, etc.) y cualquier ventana que creen. Puede crear sus propios hilos, y comunicarse con el hilo de aplicación principal a través de un controlador. Esto se hace llamando a la misma publicación o métodos sendMessage como antes, pero desde su nuevo hilo. El Runnable o Message dado será programado en la cola del mensaje del Manejador y procesado cuando sea apropiado.

0

Activity.runOnUiThread() es un caso especial de los manipuladores más genéricos. Con Handler puede crear su propia consulta de evento dentro de su propio hilo. El uso de controladores creados con el constructor predeterminado no significa que "el código se ejecutará en el hilo de UI" en general. De forma predeterminada, los manejadores se vincularon a Thread desde el que se crearon las instancias. Para crear Handler que está garantizado para unirse a la interfaz de usuario (principal) Tema debe crear Handlerobject binded a la información principal Looper así:

Handler mHandler = new Handler(Looper.getMainLooper()); 

Por otra parte, si se comprueba la aplicación de runOnuiThread() método, se usa Handler hacer las cosas:

public final void runOnUiThread(Runnable action) { 
     if (Thread.currentThread() != mUiThread) { 
      mHandler.post(action); 
     } else { 
      action.run(); 
     } 
    } 

Como se puede ver en el fragmento de código anterior, la acción Ejecutable serán ejecutadas inmediatamente, si runOnUiThread() se llama desde el subproceso de interfaz de usuario. De lo contrario, lo publicará en el controlador, que se ejecutará en algún momento posterior.

Cuestiones relacionadas