Quelqu'un peut-il me dire s'il y a une différence entre utiliser runOnUiThread () et Looper.getMainLooper (). Post () pour exécuter une tâche sur le thread d'interface utilisateur sous Android ??
À propos de la seule chose que je peux déterminer, c'est que puisque runOnUiThread est une méthode d'activité non statique, Looper.getMainLooper (). Post () est plus pratique lorsque vous devez coder quelque chose dans une classe qui ne peut pas voir l'activité (comme une interface).
Je ne cherche pas une discussion sur la question de savoir si quelque chose doit être exécuté sur le thread de l'interface utilisateur, je comprends que certaines choses ne peuvent pas et beaucoup de choses ne devraient pas, mais certaines choses (comme le démarrage d'une AsyncTask) DOIVENT être exécutées à partir de le fil de l'interface utilisateur.
Merci,
R.
la source
runOnUiThread
vérifiera si c'est déjà le fil de l'interface utilisateur et exécutera votre tâche directement au lieu de la publier comme unMessage
Réponses:
Les éléments suivants se comportent de la même manière lorsqu'ils sont appelés à partir de threads d'arrière-plan:
en utilisant
Looper.getMainLooper()
en utilisant
Activity#runOnUiThread()
La seule différence est lorsque vous faites cela à partir du thread de l'interface utilisateur depuis
vérifiera si le thread actuel est déjà le thread d'interface utilisateur, puis l'exécutera directement. Le publier sous forme de message retardera l'exécution jusqu'à ce que vous reveniez de la méthode de thread d'interface utilisateur actuelle.
Il existe également une troisième façon d'exécuter un
Runnable
sur le thread d'interface utilisateur qui seraitView#post(Runnable)
- celui-ci publiera toujours le message même lorsqu'il est appelé depuis le thread d'interface utilisateur. C'est utile car cela garantira que leView
a été correctement construit et a une mise en page avant que le code ne soit exécuté.la source