¿Cómo detectar el hilo de UI en Android?



Answers

Creo que la mejor manera es esta:

 if (Looper.getMainLooper().equals(Looper.myLooper())) {
     // UI thread
 } else {
     // Non UI thread
 }
Question

¿Existe una forma robusta de detectar si Thread.currentThread() es el hilo de la interfaz de usuario del sistema Android en una aplicación?
Me gustaría poner algunos asertos en mi código de modelo que afirme que solo un hilo ( por ejemplo, el hilo de la interfaz de usuario) accede a mi estado, para asegurar que no se necesita ningún tipo de sincronización.




A partir del nivel 23 de la API, el Looper tiene un buen método de ayuda isCurrentThread() . Puede obtener getMainLooper() y ver si es el getMainLooper() para el hilo actual de esta manera:

Looper.getMainLooper().isCurrentThread()

Es prácticamente lo mismo que:

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

pero podría ser un poco más legible y más fácil de recordar.




Además de comprobar Looper , si alguna vez intentó cerrar la sesión de id. De subprocesos en onCreate() , podría encontrar que el Id. De subproceso de UI (subproceso principal) siempre es igual a 1. Por lo tanto,

if (Thread.currentThread().getId() == 1) {
    // UI thread
}
else {
    // other thread
}





Links



Tags

android android