2011-05-25 5 views
1

Quelqu'un sait pourquoi invalidate doit être appelé par thread d'interface utilisateur?Pourquoi invalider doit être appelé par le thread d'interface utilisateur

Comme dans Java Swing, la fonction repaint peut être appelée à la fois par un thread non UI et un thread UI. repaint effectue une tâche très similaire à invalidate(cette méthode provoque un appel à la méthode de peinture de ce composant dès que possible, sinon cette méthode provoque un appel à la méthode de mise à jour de ce composant dès que possible.).

+0

Personnellement, je pense que cette question est "sous-estimée". J'ai aussi pensé à cette question, et je suis arrivé au point que la raison en est la synchronisation. Si vous mettez à jour (retracer) l'interface utilisateur uniquement à partir d'un thread, il n'y a aucune raison de faire de la synchronisation. Imaginez un scénario: dans le thread1 vous vérifiez textView pour l'égalité à une chaîne de caractères "text", si vous réussissez, vous changez le textView en "text" + "1". Mais en attendant thread2 pourrait éventuellement changer le contenu en "text2", et vous pourriez vous retrouver avec "text21", ce qui n'est pas ce que vous vouliez. Donc, pas besoin de synchroniser. D'autres significations? – azizbekian

Répondre

1

Non, ce ne sont pas les mêmes. Il existe également une méthode invalidate dans Swing, et celle-ci nécessite également que l'invocateur l'appelle depuis le thread EDT/Swing/UI.

On dirait que l'équivalent de repeindre sur Android est postInvalidate

0

Lorsque nous appelons invalidate d'un UiThread il indique à l'application de redessiner la vue lorsque le thread principal va idle.So quand nous appelons invalidate, il essentiellement planifie la Les vues doivent être dessinées à nouveau lorsque tous les autres travaux sont terminés. Si vous souhaitez redessiner l'affichage dans un thread distinct autre que UiThread, utilisez postInvalidate().

Questions connexes