studio programacion para móviles libro edición desarrollo desarrollar curso aprende aplicaciones android multithreading

para - manual de programacion android pdf



¿Cómo comprobar si se está ejecutando en el hilo de la interfaz de usuario en Android? (5)

Es un hilo de interfaz de usuario si:

Looper.myLooper() == Looper.getMainLooper()

Código fuente AOSP de origen: ManagedEGLContext.java#L100 , SharedPreferencesImpl.java#L470 , Instrumentation.java#L1650 y así sucesivamente .

Esta pregunta ya tiene una respuesta aquí:

¿Cómo puedo saber si el código en ejecución se ejecuta en el hilo principal (hilo de la interfaz de usuario)?
Con Swing utilizo el método isEventDispatchThread ...


No parece que haya un método para eso en el SDK. La verificación está en la clase ViewRoot y se realiza comparando Thread.currentThread() con un miembro de la clase que se asigna en el constructor pero nunca se expone.

Si realmente necesita esta comprobación, tiene varias opciones para implementarla:

  1. captura la android.view.ViewRoot $ CalledFromWrongThreadException
  2. post un Runnable en una vista y verificar Thread.currentThread()
  3. utilizar un Handler para hacer lo mismo

En general, creo que en lugar de comprobar si estás en el hilo correcto, debes asegurarte de que el código siempre se ejecute en el hilo de la interfaz de usuario (utilizando 2. o 3.).


Si quieres saber si estás en el hilo principal, tal vez podrías probar:

Context c = **Get a Context**; Thread.currentThread() == c.getMainLooper().getThread();

Por supuesto, podría estar equivocado, y esto podría arruinar totalmente tu aplicación.


También puede usar runOnUiThread , solo requiere un runnable que se ejecutará en el hilo ui


Use Looper.getMainLooper (). GetThread () para obtener el hilo de la interfaz de usuario. Puedes verificar si es el hilo actual usando la siguiente expresión:

Looper.getMainLooper().getThread() == Thread.currentThread()