sistema samsung que pantalla negra moto lollipop lamentablemente detuvo configurador configuracion aplicacion abierto android

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



menu de sistema abierto android (6)

¿No podrías usar el método runOnUiThread en la clase Activity ? Ver ...

http://developer.android.com/reference/android/app/Activity.html#runOnUiThread%28java.lang.Runnable%29

¿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 }


Creo que la mejor manera es esta:

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


La práctica común para determinar la identidad del hilo de UI es a través de Looper#getMainLooper :

if (Looper.getMainLooper().getThread() == Thread.currentThread()) { // On UI thread. } else { // Not on UI thread. }