44 votes

Comment vérifier si en cours d'exécution sur le fil de l'interface utilisateur dans Android?

Comment savoir si le code en cours d'exécution est exécuté sur le thread principal (thread d'interface utilisateur)?
J'utilise la méthode isEventDispatchThread avec Swing ...

111voto

Dan Syrstad Points 541

Utilisez Looper.getMainLooper (). GetThread () pour obtenir le thread d'interface utilisateur. Vous pouvez vérifier s'il s'agit du thread actuel en utilisant l'expression suivante:

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

76voto

krazyrobot Points 2273

C'est le thread de l'INTERFACE utilisateur si:

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

Source PSBA code source: ManagedEGLContext.java#L100, SharedPreferencesImpl.java#L470, Instrumentation.java#L1650 et ainsi de suite.

12voto

Josef Pfleger Points 37003

Ne regarde pas comme il y a une méthode pour que dans le SDK. Le chèque est dans l' ViewRoot de la classe et se fait en comparant Thread.currentThread() d'un membre de la classe qui lui est assigné dans le constructeur, mais jamais exposées.

Si vous avez vraiment besoin de vérifier que vous disposez de plusieurs options pour la mettre en œuvre:

  1. attraper le android.vue.ViewRoot$CalledFromWrongThreadException
  2. post un Runnable d'un point de vue et vérifiez Thread.currentThread()
  3. utiliser un Handler à faire de même

En général, je pense qu'au lieu de vérifier si vous êtes sur le bon thread, vous devriez assurez-vous que le code est exécuté sur le thread d'INTERFACE utilisateur (à l'aide de 2. ou 3.).

9voto

michael Points 1134

Vous pouvez également utiliser runOnUiThread , il ne nécessite qu'un exécutable qui sera exécuté dans le thread ui

2voto

cesar Points 1340

Si vous voulez savoir si vous êtes dans le fil principal, vous pourriez peut-être essayer:

 Context c = **Get a Context**;
Thread.currentThread() == c.getMainLooper().getThread();
 

Bien sûr, je peux me tromper et cela pourrait totalement faire exploser votre application.

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