hilos - reloj en java
Cómo verificar si el hilo actual no es el hilo principal (6)
Necesito verificar si el subproceso que ejecuta un determinado fragmento de código es el subproceso principal (UI) o no. ¿Cómo puedo conseguir esto?
La mejor manera es la más clara, la más robusta: *
Thread.currentThread().equals( Looper.getMainLooper().getThread() )
O, si la plataforma de tiempo de ejecución es de nivel API 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 source ). Es posible que desee evitar los gastos generales almacenando el valor de retorno y reutilizándolo.
* crédito greg7gkb y 2cupsOfTech
Puedes probar Thread.currentThread (). IsDaemon ()
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 subproceso de la interfaz de usuario, puede utilizar esto:
new Handler(Looper.getMainLooper()).post(new Runnable() {
@Override
public void run() {
//this runs on the UI thread
}
});
puede usar el código de abajo 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
puede verificarlo en el logcat de ddms de Android, donde la identificación del proceso será la misma, pero la identificación del hilo será diferente.
Looper.myLooper() == Looper.getMainLooper()
Si esto devuelve true, entonces estás en el hilo de la interfaz de usuario!