Cómo comprobar si el hilo actual no es hilo principal

Necesito comprobar si el hilo que ejecuta un determinado fragmento de código es el hilo principal (UI) o no. ¿Cómo puedo conseguir esto?

Looper.myLooper() == Looper.getMainLooper() 

si esto devuelve verdadero, ¡entonces estás en el hilo de UI!

puede usar el código a continuación para saber si el hilo actual es UI / hilo principal o no

 if(Looper.myLooper() == Looper.getMainLooper()) { // Current Thread is Main Thread. } 

o también puedes usar esto

 if(Looper.getMainLooper().getThread() == Thread.currentThread()) { // Current Thread is Main Thread. } 

Aquí hay una pregunta similar

La mejor manera es la manera más clara: *

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

O bien, si la plataforma de tiempo de ejecución es API nivel 23 (Marshmallow 6.0) o superior:

 Looper.getMainLooper().isCurrentThread() 

Ver la API de Looper . Tenga en cuenta que llamar a Looper.getMainLooper() implica sincronización (consulte la fuente ). Es posible que desee evitar la sobrecarga almacenando el valor de retorno y reutilizándolo.

* crédito greg7gkb

Resumiendo las soluciones, creo que es la mejor:

 boolean isUiThread = VERSION.SDK_INT >= VERSION_CODES.M ? Looper.getMainLooper().isCurrentThread() : Thread.currentThread() == Looper.getMainLooper().getThread(); 

Y, si desea ejecutar algo en el hilo de la interfaz de usuario, puede usar esto:

 new Handler(Looper.getMainLooper()).post(new Runnable() { @Override public void run() { //this runs on the UI thread } }); 

usted puede verificarlo en ddms logcat de android donde la identificación del proceso será la misma pero la identificación del hilo será diferente.

Puede probar Thread.currentThread (). IsDaemon ()