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 ...
Réponses
Trop de publicités?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.
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:
- attraper le android.vue.ViewRoot$CalledFromWrongThreadException
-
post
unRunnable
d'un point de vue et vérifiezThread.currentThread()
- 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.).
Vous pouvez également utiliser runOnUiThread , il ne nécessite qu'un exécutable qui sera exécuté dans le thread ui