¿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
equals
ya que solo estamos comparando referencias y, además, ambas son estáticas.A partir del nivel de API 23,
Looper
tiene un buen método de ayudaisCurrentThread
. Puede obtener elmainLooper
y 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
runOnUiThread
método en laActivity
clase? Mira ...http://developer.android.com/reference/android/app/Activity.html#runOnUiThread%28java.lang.Runnable%29
fuente