¿Existe una forma sólida de detectar si Thread.currentThread()el hilo de la interfaz de usuario del sistema Android está en una aplicación?
Me gustaría poner algunas afirmaciones en el código de mi modelo que afirman que solo un hilo ( por ejemplo, el hilo de la interfaz de usuario) accede a mi estado, para asegurar que no sea necesario ningún tipo de sincronización.
117

Respuestas:
La práctica común para determinar la identidad del subproceso de la interfaz de usuario es a través de Looper # getMainLooper :
Desde el nivel de API 23 en adelante, hay un enfoque un poco más legible utilizando el nuevo método auxiliar isCurrentThread en el bucle principal:
fuente
Creo que la mejor manera es esta:
fuente
equalsya que solo estamos comparando referencias y, además, ambas son estáticas.A partir del nivel de API 23,
Loopertiene un buen método de ayudaisCurrentThread. Puede obtener elmainLoopery ver si es el del hilo actual de esta manera:Es prácticamente lo mismo que:
pero podría ser un poco más legible y más fácil de recordar.
fuente
Pero requiere API nivel 23
fuente
Además de verificar el looper , si alguna vez intentó cerrar la sesión con el ID del hilo
onCreate(), podría encontrar que el ID del hilo de la interfaz de usuario (hilo principal) siempre es igual a 1. Por lo tantofuente
¿No pudiste usar el
runOnUiThreadmétodo en laActivityclase? Mira ...http://developer.android.com/reference/android/app/Activity.html#runOnUiThread%28java.lang.Runnable%29
fuente