Existe-t-il un moyen robuste de détecter si Thread.currentThread()
le thread d'interface utilisateur du système Android est dans une application?
Je voudrais mettre quelques affirmations dans mon code de modèle qui affirme qu'un seul thread ( par exemple le thread ui) accède à mon état, pour m'assurer qu'aucun type de synchronisation n'est nécessaire.
117
Réponses:
La pratique courante pour déterminer l'identité du thread d'interface utilisateur est via Looper # getMainLooper :
À partir du niveau d'API 23 et plus, il existe une approche légèrement plus lisible en utilisant la nouvelle méthode d'assistance isCurrentThread sur le boucleur principal:
la source
Je pense que la meilleure façon est la suivante:
la source
equals
puisque nous ne comparons que des références, et en plus de cela, elles sont toutes les deux statiques.À partir du niveau 23 de l'API, il
Looper
existe une belle méthode d'aideisCurrentThread
. Vous pouvez obtenir lemainLooper
et voir si c'est celui du thread actuel de cette façon:C'est pratiquement la même chose que:
mais cela pourrait être un peu plus lisible et plus facile à retenir.
la source
Mais cela nécessite le niveau d'API 23
la source
En plus de vérifier le boucleur , si vous avez déjà essayé de vous déconnecter de l' ID de thread
onCreate()
, vous pourriez trouver que l' ID de thread d'interface utilisateur (thread principal) est toujours égal à 1. Par conséquentla source
N'avez-vous pas pu utiliser la
runOnUiThread
méthode dans laActivity
classe? Voir ..http://developer.android.com/reference/android/app/Activity.html#runOnUiThread%28java.lang.Runnable%29
la source