¿Cómo puedo saber si el código de ejecución se ejecuta en el hilo principal (hilo de IU)?
Con Swing utilizo el método isEventDispatchThread
...¿Cómo comprobar si se está ejecutando en el hilo de UI en Android?
Respuesta
Parece que no hay un método para eso en el SDK. El cheque está en la clase ViewRoot
y se hace comparando Thread.currentThread()
con un miembro de la clase asignado en el constructor pero nunca expuesto.
Si realmente necesita este comprobar que tiene varias opciones para ponerla en práctica:
- pesca del android.view.ViewRoot $ CalledFromWrongThreadException
post
unRunnable
a una vista y comprobarThread.currentThread()
- uso de una
Handler
para hacer lo mismo
En general, creo que en lugar de comprobando si está en el hilo correcto, debe simplemente asegúrese de que el código siempre se ejecuta en el hilo de la interfaz de usuario (usando 2. o 3.).
Utilice Looper.getMainLooper(). GetThread() para obtener el subproceso de interfaz de usuario. Puede comprobar si es el hilo actual utilizando la siguiente expresión:
Looper.getMainLooper().getThread() == Thread.currentThread()
También puede utilizar runOnUiThread, que sólo requiere un ejecutable que se ejecutará en el hilo de interfaz de usuario
Es hilo de interfaz de usuario si:
Looper.myLooper() == Looper.getMainLooper()
fuente código fuente AOSP: ManagedEGLContext.java#L100
, SharedPreferencesImpl.java#L470
, Instrumentation.java#L1650
and so on.
Si desea saber si se encuentra en el hilo principal, tal vez podría intentar:
Context c = **Get a Context**;
Thread.currentThread() == c.getMainLooper().getThread();
Por supuesto, puedo estar equivocado, y esto podría soplar totalmente su aplicación hacia arriba.
Una prueba rápida sugiere que esto funciona bien. –
Esto funciona, pero no es necesario obtener un contexto, consulte la respuesta de bbalazs. –
- 1. Cómo comprobar si se está ejecutando un Thread de Android
- 2. Comprobar si el proceso se está ejecutando
- 3. Comprobar si la animación se está ejecutando en cocos2d-x
- 4. ¿Cómo comprobar si un hilo está durmiendo?
- 5. ¿Cómo comprobar si una aplicación WPF ya se está ejecutando?
- 6. Cómo comprobar si SQL Server Agent se está ejecutando
- 7. powershell: ¿cómo comprobar si se está ejecutando la transcripción?
- 8. ¿Cómo verifica qué hilo está ejecutando el código en Java?
- 9. Cómo comprobar en ASP.NET MVC Ver si el sitio se está ejecutando en localhost o 127.0.0.1
- 10. ANDROID: cómo comprobar si la animación se está ejecutando antes de comenzar una nueva animación
- 11. ¿Se está ejecutando el hilo Java en qué procesador?
- 12. Android cómo comprobar si el servicio de intento aún se está ejecutando o si ha dejado de ejecutarse
- 13. ¿Cómo comprobar si JBoss se está ejecutando en el servidor Unix?
- 14. compruebe si el programa se está ejecutando y ejecútelo si no está en perl
- 15. ¿Cómo detectar el hilo de UI en Android?
- 16. comprobar si jQuery UI se carga
- 17. Android: ¿cómo comprobar si se está tocando la pantalla?
- 18. Llamada de API para comprobar si se está ejecutando en el emulador wp7
- 19. Descubriendo si la actividad de Android se está ejecutando
- 20. ¿Google gson se está ejecutando en android?
- 21. Cómo comprobar si un trabajo se está ejecutando en Quartz Framework
- 22. ¿Cómo comprobar si NFC está habilitado o no en Android?
- 23. Android: ¿Cómo comprobar si el servidor está disponible?
- 24. Cómo comprobar si 3g está activo o no en android
- 25. Python: variables condicionales basadas en si nosetest se está ejecutando
- 26. Cómo saber si el servidor de emacs se está ejecutando
- 27. Cómo saber si el servicio se está ejecutando utilizando adb shell en android
- 28. Determinar si el programa se está ejecutando en Windows Server
- 29. Comprobar si el cronómetro está funcionando
- 30. ¿Se producen devoluciones de llamada en el hilo principal (UI)?
+1 por (3) –
Will