Quel est le UiThread Android (thread UI)

Est-ce que quelqu’un peut m’expliquer ce qu’est exactement le thread d’interface utilisateur? Sur developer.android.com, il est dit à propos de la fonction runOnUiThread

final public final vide runOnUiThread (action exécutable)

Depuis: API Niveau 1 Exécute l’action spécifiée sur le thread d’interface utilisateur. Si le thread en cours est le thread d’interface utilisateur, l’action est exécutée immédiatement. Si le thread en cours n’est pas le thread d’interface utilisateur, l’action est publiée dans la queue des événements du 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 activité d’interface utilisateur telle qu’un appel entrant ou une atténuation de l’écran, etc.? Si non, que comprend exactement le thread d’interface utilisateur?

Je vous remercie

    UIThread est le principal fil d’exécution de 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, ContentProviders, BroadcastReceivers) sont créés dans ce thread et tous les appels système à ces composants sont effectués dans ce thread.

    Par exemple, supposons que votre application soit une classe d’activité unique. Ensuite, toutes les méthodes du cycle de vie et la plupart de votre code de gestion des événements sont exécutés dans cet UIThread. Ce sont des méthodes comme onCreate , onPause , onDestroy , onClick , etc. De plus, c’est là 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 d’interface utilisateur.

    Pour plus d’informations sur les processus et les threads de votre application, cliquez ici.

    Lorsque vous créez explicitement un nouveau thread pour qu’il fonctionne en arrière-plan, ce code n’est pas exécuté sur UIThread. Alors, que se passe-t-il si ce thread d’arrière-plan doit faire quelque chose qui change l’interface utilisateur? C’est à quoi runOnUiThread le runOnUiThread . En fait, vous êtes censé utiliser un gestionnaire (voir le lien ci-dessous pour plus d’informations à ce sujet). Il fournit à ces threads d’arrière-plan la possibilité d’exécuter du code pouvant modifier l’interface utilisateur. Ils le font en plaçant le code de modification de l’interface utilisateur dans un object Runnable et en le transmettant à la méthode runOnUiThread.

    Pour plus d’informations sur la création de threads de travail et la mise à jour de l’interface utilisateur, cliquez ici.

    runOnUiThread je n’utilise que la méthode runOnUiThread dans mes tests d’instrumentation. Étant donné que le code de test ne s’exécute pas dans UIThread, vous devez utiliser cette méthode pour exécuter du code modifiant l’interface utilisateur. Je l’utilise donc pour injecter des clics et des événements clés dans mon application. Je peux alors vérifier l’état de l’application pour m’assurer que les choses correctes se sont produites.

    Pour plus d’informations sur les tests et l’exécution du code sur UIThread, cliquez ici

    Si vous exécutez du code de blocage (par exemple, une requête HTTP ) dans un thread séparé, envisagez d’utiliser AsyncTask . Sa doInBackground doInBackground s’exécute sur un thread distinct. AsyncTask vous fournit les méthodes onProgressUpdate et onPostExecute qui sont garanties pour s’exécuter sur le thread d’interface utilisateur .

    Si vous avez besoin de mises à jour de la progression de l’interface graphique (par exemple, via une publishProgress progression), appelez publishProgress intérieur de doInBackground . Cela conduit à un appel ultérieur de onPublishProgress .

    onPostExecute est automatiquement appelé après le retour de doInBackground .

    Tous les dessins d’interface utilisateur, etc. se produisent dans un thread séparé. Son appelé le UIThread. Si vous souhaitez apporter des modifications à l’interface utilisateur, vous devez vous assurer que cela se produit dans le contexte de UIThread. La manière la plus simple de le faire est d’utiliser runOnUiThread