89 votes

Quel est le UiThread Android (fil de l'interface utilisateur)

Quelqu'un peut m'expliquer ce qu'est exactement le thread d'INTERFACE utilisateur est? Sur developer.android.com il dit à propos de la fonction runOnUiThread

public final void runOnUiThread (Runnable action)

Depuis: l'API de Niveau 1 s'Exécute l'action spécifiée sur le thread d'INTERFACE utilisateur. Si l' thread courant est le thread de l'INTERFACE utilisateur, alors l'action est exécutée immédiatement. Si le fil n'est pas le thread de l'INTERFACE utilisateur, l'action est posté à l'événement de la file d'attente du thread d'INTERFACE utilisateur.

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

Merci

149voto

Jimbo Points 3751

L'UIThread est le thread principal de l'exécution de votre application. C'est où la plupart de vos code de l'application est exécutée. Tous les composants de votre application (Activités, Services, ContentProviders, BroadcastReceivers) sont créés dans ce fil, et tout le système des appels à ces composants sont effectuées dans ce fil.

Par exemple, disons que votre application est une seule classe d'Activité. Puis tout le cycle de vie des méthodes et des plus de votre code de gestion des événements est exécuté dans cet UIThread. Ce sont des méthodes comme l' onCreate, onPause, onDestroy, onClick, etc. En outre, c'est là que toutes les mises à jour de l'INTERFACE utilisateur sont faites. Tout ce qui provoque de l'INTERFACE utilisateur pour être mis à jour ou modifié doit se passer sur le thread d'INTERFACE utilisateur.

Pour plus d'informations sur votre application, les Processus et les Threads cliquez ici.

Lorsque vous avez explicitement générer un nouveau thread pour le faire fonctionner en arrière-plan, ce code n'est pas exécuté sur l'UIThread. Donc ce qui arrive si ce thread d'arrière-plan doit faire quelque chose qui change l'INTERFACE utilisateur? C'est ce que l' runOnUiThread . En fait, vous êtes censé utiliser un Gestionnaire (voir le lien ci-dessous pour plus d'info sur ce sujet). Il fournit ces threads d'arrière-plan de la capacité à exécuter le code qui permet de modifier l'INTERFACE utilisateur. Ils le font en mettant l'INTERFACE de modification de code dans un objet Praticable et en passant à la runOnUiThread méthode.

Pour plus d'informations sur les threads de travail et la mise à jour de l'INTERFACE utilisateur à partir d'eux, cliquez ici

Personnellement, je utiliser uniquement l' runOnUiThread méthode dans mon Instrumentation des Essais. Depuis le test de code ne s'exécute pas dans l'UIThread, vous devez utiliser cette méthode pour exécuter le code qui modifie l'INTERFACE utilisateur. 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 de code sur l'UIThread cliquez ici

10voto

Martin Pabst Points 171

Si vous exécutez le blocage de code (par exemple, un Http-Request) dans un Thread séparé, pensez à utiliser AsyncTask. Ses doInBackground-Méthode fonctionne sur un Thread séparé. AsyncTask vous fournit des méthodes d' onProgressUpdate et onPostExecute qui sont garantis pour fonctionner sur le thread de l'INTERFACE utilisateur.

Si vous avez besoin d'interface graphique de progression des mises à jour (par exemple via un progressbar) appel publishProgress à l'intérieur d' doInBackground. Cela conduit à un appel ultérieur d' onPublishProgress.

onPostExecute est automatiquement appelée après l' doInBackground de rendement.

5voto

the100rabh Points 2978

Tous les dessins de l'interface utilisateur, etc., se produisent dans un fil séparé. C'est ce qu'on appelle l'UIThread. Si vous souhaitez apporter des modifications à l'interface utilisateur, vous devez vous assurer que cela se produit dans le contexte UIThread. Le moyen le plus simple de le faire est d'utiliser runOnUiThread

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X