Je dois vérifier si le thread exécutant un certain morceau de code est le thread principal (UI) ou non. Comment puis-je atteindre cet objectif?
java
android
multithreading
Charlie-Blake
la source
la source
Réponses:
si cela retourne vrai, alors vous êtes sur le fil de l'interface utilisateur!
la source
vous pouvez utiliser le code ci-dessous pour savoir si le thread actuel est UI / Main thread ou non
ou vous pouvez également l'utiliser
Voici une question similaire
la source
Looper.myLooper()
retournera null si le thread n'est pas associé à un Looper. Les deux sont donc sûrs et ont le même résultat, mais le premier est un peu plus lent pendant qu'il recherche dans une carte pour trouver le looper et son thread associé et faire d'autres choses.Le meilleur moyen est le moyen le plus clair et le plus robuste: *
Ou, si la plate-forme d'exécution est de niveau API 23 (Marshmallow 6.0) ou supérieur:
Voir l' API Looper . Notez que l'appel
Looper.getMainLooper()
implique la synchronisation (voir la source ). Vous souhaiterez peut-être éviter la surcharge en stockant la valeur de retour et en la réutilisant.* crédit greg7gkb et 2cupsOfTech
la source
Looper.myLooper() == Looper.getMainLooper()
, ce qui, je pense, est moins clair. Je crédite greg7gkb.equals
, et revient donc à==
, mais cela pourrait changer à l'avenir. J'ai donc corrigé la réponse.Résumant les solutions, je pense que c'est la meilleure:
Et, si vous souhaitez exécuter quelque chose sur le thread d'interface utilisateur, vous pouvez utiliser ceci:
la source
Tu peux vérifier
la source
Permettez-moi de faire une préface à ceci: j'ai reconnu que ce post avait le tag 'Android', cependant, ma recherche n'avait rien à voir avec 'Android' et c'était mon meilleur résultat. À cette fin, pour les utilisateurs non Android SO Java qui arrivent ici, n'oubliez pas:
Après avoir défini cela, ailleurs dans votre code, vous pouvez facilement vérifier si vous êtes sur le point d'exécuter sur le thread principal avec:
Un peu gêné j'avais cherché avant de m'en souvenir, mais j'espère que cela aidera quelqu'un d'autre!
la source
vous pouvez le vérifier dans android ddms logcat où l'identifiant du processus sera le même mais l'identifiant du thread sera différent.
la source
Xamarin.Android
port: (C#
)Usage:
la source
Vous pouvez essayer Thread.currentThread (). IsDaemon ()
la source