450 votes

Comment vérifier si le thread actuel n'est pas le thread principal ?

Je dois vérifier si le thread qui exécute un certain morceau de code est le thread principal (UI) ou non. Comment puis-je y parvenir ?

0 votes

Exemple à démontrer avec un exemple de fil code2concept.blogspot.in/2015/02/

4voto

Kumar Santanu Points 21

Tout d'abord, vérifiez s'il s'agit du fil principal ou non.

En Kotlin

fun isRunningOnMainThread(): Boolean {
    return Thread.currentThread() == Looper.getMainLooper().thread
}

En Java

static boolean isRunningOnMainThread() {
  return Thread.currentThread().equals(Looper.getMainLooper().getThread());
}

3voto

ThatOneGuy Points 426

Permettez-moi de commencer par ceci : Je reconnais que cet article porte la mention "Android", mais ma recherche n'avait rien à voir avec "Android" et cet article était le premier résultat. À cette fin, pour le non-Android Pour les utilisateurs de Java qui atterrissent ici, n'oubliez pas :

public static void main(String[] args{
    Thread.currentThread().setName("SomeNameIChoose");
    /*...the rest of main...*/
}

Après avoir défini ce paramètre, vous pouvez facilement vérifier, ailleurs dans votre code, si vous êtes sur le point d'exécuter sur le thread principal avec :

if(Thread.currentThread().getName().equals("SomeNameIChoose"))
{
    //do something on main thread
}

Je suis un peu gêné d'avoir cherché avant de me souvenir de ceci, mais j'espère que cela aidera quelqu'un d'autre !

2voto

shubham chouhan Points 81

Enregistrez juste cette ligne, elle devrait imprimer "main".

Thread.currentThread().name

1voto

Mehdi Dehghani Points 3665

Xamarin.Android port : ( C# )

public bool IsMainThread => Build.VERSION.SdkInt >= BuildVersionCodes.M
    ? Looper.MainLooper.IsCurrentThread
    : Looper.MyLooper() == Looper.MainLooper;

Utilisation :

if (IsMainThread) {
    // you are on UI/Main thread
}

1voto

Vishwanath Points 2038

Vous pouvez le vérifier dans le logcat Android ddms où l'id de processus sera le même mais l'id de thread sera différent.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X