104 votes

Android: Quelle est la différence entre Activity.runOnUiThread et View.post?

Quelle est la différence entre Activity.runOnUiThread et View.post , quelqu'un pourrait-il, s'il vous plaît, expliquer?

109voto

MByD Points 78505

Il n'y a pas vraiment de différence, sauf que l' View.post est utile lorsque vous ne disposez pas d'un accès direct à l'activité.

Dans les deux cas, si ce n'est sur le thread de l'INTERFACE utilisateur, Handler#post(Runnable) sera appelé en coulisses.

Comme CommonsWare mentionnées dans le commentaire, il y a une différence entre les deux, lorsqu'il est appelé sur le thread de l'Interface utilisateur, Activity#runOnUiThread qui fera appel à la run méthode directement, tandis que d' View#post affichera l' runnable sur la file d'attente (par exemple, appeler l' Handler#post)

Le point important de l'OMI est que les deux ont le même objectif, et pour quiconque de l'utiliser, il devrait y avoir aucune différence (et la mise en œuvre pourrait changer dans le futur).

23voto

pareshgoel Points 61

Une autre différence entre Activity.runOnUiThread et view.post () réside dans le fait que le fichier exécutable dans view.post () est appelé après que la vue est attachée à une fenêtre.

17voto

kabuko Points 23166

Sont acceptables pour la plupart des situations et pour la plupart, ils sont interchangeables, mais ils sont légèrement différents. La plus grande différence est bien sûr que l'on est disponible à partir d'un Activity et l'autre à partir d'un View. Il y a beaucoup de chevauchement entre les personnes, mais parfois en Activity vous n'aurez pas accès à un View, et parfois en View vous n'aurez pas accès à un Activity.

L'un des cas que j'ai rencontré avec View.post je l'ai mentionné dans une réponse à l'autre question sur View.post: View.post ne fonctionne qu' à partir d'un autre thread lorsque l' View est attaché à une fenêtre. C'est rarement un problème, mais peut parfois provoquer l' Runnable à ne jamais exécuter, surtout si vous vous appelez View.post dans la onCreate méthode de Activity. Une alternative est d'utiliser Handler.post qui est ce que l' Activity.runOnUiThread et View.post a utiliser sous la couvre de toute façon.

(édité pour plus de précision, a ajouté: "à partir d'un autre thread")

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