Existe-t-il un moyen fiable de détecter si Thread.currentThread()
est le thread de l'interface utilisateur du système Android dans une application?
Je voudrais mettre quelques affirmations dans mon code modèle qui affirme qu'un seul thread (par exemple le thread ui) accède à mon état, pour assurer qu'aucune synchronisation n'est nécessaire.Comment détecter le thread UI sur Android?
Répondre
Impossible d'utiliser la méthode runOnUiThread
dans la classe Activity
Voir ..
Mon application fonctionne, mais, elle a plusieurs auteurs et devient assez grande et complexe. Ce que je veux faire est d'ajouter un filet de sécurité supplémentaire, une affirmation qui attrape l'erreur si quelqu'un appelle une méthode qui est conçue pour être appelée seulement à partir du thread GUI à partir d'un autre thread. – ParDroid
Je corrige actuellement un bogue où l'utilisation de runOnUiThread provoque le clignotement de l'UX. – fobbymaster
pratique courante pour déterminer l'identité de l'interface utilisateur thread via Looper#getMainLooper:
if (Looper.getMainLooper().getThread() == Thread.currentThread()) {
// On UI thread.
} else {
// Not on UI thread.
}
http://stackoverflow.com/questions/11411022/how-to-check-if-current-thread-is-not-main-thread Cette réponse est bien aussi) – UnknownJoe
Je pense le meilleur moyen est le suivant:
if (Looper.getMainLooper().equals(Looper.myLooper())) {
// UI thread
} else {
// Non UI thread
}
En plus de vérifier looper, si vous avez déjà essayé de fermeture de session id fil dans onCreate()
, vous pouvez trouver le thread d'interface utilisateur (thread principal) id est toujours égal à 1. Par conséquent
if (Thread.currentThread().getId() == 1) {
// UI thread
}
else {
// other thread
}
Je ne trouve aucune documentation officielle corroborant que cela soit vrai, et le sera toujours. avez vous un lien? –
C'est ce que j'ai trouvé dans logcat quand je veux surveiller le comportement multi-thread. Vous pouvez essayer de sortie l'ID de fil – yushulx
Je recommanderais fortement contre cela, car cette valeur peut être spécifique à votre appareil et/ou la version d'Android. Même si c'était le cas sur tous les appareils Android en ce moment, il n'y a aucune garantie que cela continuera d'être le cas dans les versions ultérieures. Enregistrer l'ID de thread dans un membre de classe lors de l'exécution de onCreate() me semble un peu plus raisonnable. – personne3000
public boolean onUIThread() {
return Looper . getMainLooper() . isCurrentThread() ;
}
Mais cela nécessite un niveau d'API 23
Bon à savoir! –
A partir du niveau API 23, le Looper
a une belle méthode d'assistance isCurrentThread
. Vous pouvez obtenir le mainLooper
et voir si elle est l'un pour le thread courant de cette façon:
Looper.getMainLooper().isCurrentThread()
Il est pratiquement le même que:
Looper.getMainLooper().getThread() == Thread.currentThread()
, mais il pourrait être un peu plus lisible et plus facile à retenir .
- 1. Détecter si le code s'exécute sur le thread d'arrière-plan ou le thread UI (Dispatcher)
- 2. UI aspect sur Android
- 3. Gardez UI Thread free
- 4. Un moyen d'exécuter brièvement Thread UI lorsque le thread non-UI est arrêté dans le débogueur?
- 5. WPF UI Thread Status
- 6. BlockingCollection + thread UI
- 7. Détecter le mouvement sur l'axe en android
- 8. Android: asyncTask peut-il retourner dans un autre thread que thread UI?
- 9. opération cross-thread même lors de l'exécution sur le thread UI
- 10. jQuery UI Datepicker détecter sélectionnez
- 11. comment obtenir le droit mvc sur android?
- 12. Android Impossible d'exécuter le thread utilisateur setListAdapter()
- 13. Problème de thread/COM/UI possible
- 14. WPF: Passage d'objets entre thread Thread et Background UI
- 15. Android checkbox ui change
- 16. Détecter l'événement de défilement sur le navigateur Android
- 17. Android UI XML Layout
- 18. Activités Android UI persistance
- 19. Android UI Layout Question
- 20. comment détecter les fonctionnalités javascript sur Android 1.5
- 21. Thread Performance dans Android
- 22. Accéder au thread UI d'un formulaire?
- 23. Comment détecter lorsqu'un utilisateur tape sur une vue dans Android
- 24. Android - Détecter le chemin de Drag complexe
- 25. android Comment détecter si l'application a fonctionné dans le passé
- 26. Android: thread de fond
- 27. Thread Android Issue
- 28. Comment détecter les signaux sur le port série COM1?
- 29. Comment détecter un périphérique sur le réseau?
- 30. Thread Android principal sortant
Voir ma réponse ici: http://stackoverflow.com/a/41280460/878126 –