Necesito verificar si el hilo que ejecuta cierto código es el hilo principal (UI) o no. ¿Cómo puedo conseguir esto?
java
android
multithreading
Charlie-Blake
fuente
fuente
Respuestas:
Si esto devuelve verdadero, entonces estás en el hilo de la interfaz de usuario.
fuente
puede usar el siguiente código para saber si el hilo actual es UI / hilo principal o no
o también puedes usar esto
Aquí hay una pregunta similar
fuente
Looper.myLooper()
devolverá nulo si el hilo no está asociado con un Looper. Por lo tanto, ambos son seguros y tienen el mismo resultado, pero el primero es un poco más lento mientras busca dentro de un mapa para descubrir el enlazador y su hilo asociado y hacer otras cosas.La mejor manera es la más clara y robusta: *
O, si la plataforma de tiempo de ejecución es API nivel 23 (Marshmallow 6.0) o superior:
Ver la API de Looper . Tenga en cuenta que las llamadas
Looper.getMainLooper()
implican sincronización (ver la fuente ). Es posible que desee evitar la sobrecarga almacenando el valor de retorno y reutilizándolo.* crédito greg7gkb y 2cupsOfTech
fuente
Looper.myLooper() == Looper.getMainLooper()
, lo que creo que es menos claro. Le doy crédito a greg7gkb.equals
, por lo que recurre a==
, pero eso podría cambiar en el futuro. Entonces corregí la respuesta.Resumiendo las soluciones, creo que esa es la mejor:
Y, si desea ejecutar algo en el hilo de la interfaz de usuario, puede usar esto:
fuente
Puedes comprobar
fuente
Permítanme presentar esto con anterioridad: reconocí que esta publicación tiene la etiqueta 'Android', sin embargo, mi búsqueda no tuvo nada que ver con 'Android' y este fue mi resultado principal. Con ese fin, para los usuarios de SO Java que no son Android que aterrizan aquí, no se olviden de:
Después de configurar esto, en otra parte de su código, puede verificar fácilmente si está a punto de ejecutar en el hilo principal con:
Un poco avergonzado había buscado antes de recordar esto, ¡pero espero que ayude a alguien más!
fuente
puede verificarlo en android ddms logcat donde la identificación del proceso será la misma pero la identificación del hilo será diferente.
fuente
Xamarin.Android
puerto: (C#
)Uso:
fuente
Puede probar Thread.currentThread (). IsDaemon ()
fuente