2010-07-20 5 views
3

J'utilise Twitter4j en mode asynchrone. Lorsque j'obtiens une réponse dans Listener, je veux être en mesure de changer certaines vues dans mon activité, mais il en résulte CalledFromWrongThreadException.Comment accéder élégamment à Android Views à partir d'autres threads?

Je sais que je peux utiliser la méthode runOnUiThread, mais quelle est la solution la plus élégante pour cela, à l'exception des classes Runnable inline?

Une partie de mon activité:

TwitterListener listener = new TwitterAdapter() { 

     @Override 
     public void gotUserDetail(User user) { 
      super.gotUserDetail(user); 

      fillInUserProfileDetails(user); 

Répondre

3

Je ne pense pas qu'il y ait une solution plus "élégante" que Activity.runOnUiThread(Runnable) ou View.post(Runnable). Vous avez probablement déjà vu la discussion du filetage dans les docs Android:

EDIT: http://android-developers.blogspot.com/2009/05/painless-threading.html

Comme il dit, la boîte à outils interface utilisateur Android est ThreadSafe pas, donc toutes les interactions avec elle doit se produire sur la même thread, à savoir le thread UI de l'application; et si vous allez passer du travail d'un thread à un autre, vous aurez besoin d'un objet Runnable pour encapsuler le travail à effectuer.

Je sais que les classes internes anonymes peuvent sembler plutôt désordonnées, mais elles sont assez répandues en Java, puisqu'elles sont les plus proches de closures disponibles dans la langue. Donc, la meilleure chose à faire pour vous, IMO, est de grincer des dents et d'utiliser Activity.runOnUiThread(Runnable), et rappelez-vous que l'élégance est dans l'œil du programmeur.

Questions connexes