Qu'est-ce que L'Android UiThread (UI thread)

Quelqu'un peut-il m'expliquer ce qu'est exactement le fil UI? Sur developer.android.com il est dit à propos de la fonction runOnUiThread

public final void runOnUiThread (Runnable action)

depuis: le niveau 1 de L'API exécute l'action spécifiée sur le thread de L'interface utilisateur. Si l' le thread courant est le thread UI, alors l'action est exécutée immédiatement. Si le thread courant n'est pas le thread UI, l'action est posté à la file d'attente d'événements le thread d'INTERFACE utilisateur.

est-ce que le thread de L'interface utilisateur signifie que cela sera exécuté chaque fois que l'activité est poussée en arrière-plan par une certaine activité d'interface utilisateur comme l'appel entrant ou l'atténuation de l'écran, etc.? Si pas, exactement ce que fait le thread d'INTERFACE utilisateur ?

Merci

70
demandé sur Flow 2010-09-06 19:20:33

3 réponses

le UIThread est le fil conducteur de l'exécution pour votre application. C'est là que la plupart de votre code d'application est exécuté. Tous les composants de votre application (activités, Services, fournisseurs de contenu, diffuseurs) sont créés dans ce thread, et tous les appels système vers ces composants sont effectués dans ce thread.

par exemple, disons que votre application est une classe d'activité unique. Alors toutes les méthodes du cycle de vie et la plupart de votre code de gestion d'événement est exécuter dans ce UIThread. Ce sont des méthodes comme onCreate , onPause , onDestroy , onClick , etc. De plus, c'est ici que toutes les mises à jour de L'interface utilisateur sont effectuées. Tout ce qui provoque la mise à jour ou la modification de L'interface utilisateur doit se produire sur le thread de L'interface.

pour plus d'informations sur les processus et les Threads de votre application, Cliquez ici.

quand vous lancez explicitement un nouveau thread pour faire un travail en arrière-plan, ce code est pas courir sur le UIThread. Alors que se passe-t-il si ce fil de fond doit faire quelque chose qui change L'interface utilisateur? C'est à ça que sert le runOnUiThread . En fait, vous êtes censé utiliser un Handler (voir le lien ci-dessous pour plus d'informations à ce sujet). Il fournit à ces threads de fond la capacité d'exécuter du code qui peut modifier L'interface utilisateur. Ils le font en mettant le code de modification de L'UI dans un objet exécutable et en le passant à la méthode runOnUiThread.

Pour plus d'informations sur frayeur threads et la mise à jour de L'UI à partir d'eux cliquez ici

personnellement, je n'utilise la méthode runOnUiThread que dans mes essais D'Instrumentation. Puisque le code de test ne s'exécute pas dans L'UIThread, vous devez utiliser cette méthode pour lancer le code qui modifie L'UI. Donc, je l'utilise pour injecter cliquez et événements clés dans mon application. Je peux alors vérifier l'état de l'application pour s'assurer que les choses se sont passées.

pour plus d'informations sur les tests et l'exécution du code sur le UIThread Cliquez ici

133
répondu plainjimbo 2015-07-01 19:09:43

si vous exécutez un code de blocage (par exemple une requête Http) dans un Thread séparé, envisagez d'utiliser AsyncTask . Sa méthode doInBackground fonctionne sur un filetage séparé. AsyncTask vous fournit les méthodes onProgressUpdate et onPostExecute qui sont garantis pour fonctionner sur le filetage UI .

si vous avez besoin de mises à jour GUI-progress (par exemple via une barre de progression), appelez publishProgress à l'intérieur de doInBackground . Cela conduit à un appel ultérieur de onPublishProgress .

onPostExecute est automatiquement appelé après les retours doInBackground .

9
répondu Martin Pabst 2017-05-23 11:54:48

Toute l'INTERFACE utilisateur de dessins, etc. se produisent dans un fil séparé. Ça s'appelle le UIThread. Si vous voulez faire un changement à L'UI u doit utiliser assurez-vous qu'il se passe dans le contexte D'UIThread. La façon la plus facile de le faire est de faire usage de runOnUiThread

4
répondu the100rabh 2010-09-06 15:48:25