2010-07-20 79 views
3

我在异步模式下使用Twitter4j。当我在听众中得到响应时,我希望能够在我的活动中更改某些视图,但结果为CalledFromWrongThreadException如何优雅地从其他线程访问Android视图?

我知道我可以使用runOnUiThread方法,但除了内联Runnable Classes之外,最优雅的解决方案是什么?我的活动

部分:

TwitterListener listener = new TwitterAdapter() { 

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

      fillInUserProfileDetails(user); 

回答

3

我不认为有什么更“优雅”的解决方案比Activity.runOnUiThread(Runnable)View.post(Runnable)。你可能已经看到线程的讨论在Android文档:

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

如前所述那里,Android的UI工具包不是线程安全的,所以它的所有交互必须在发生同一个线程,即应用程序的UI线程;如果您要将工作从一个线程传递到另一个线程,则需要一个Runnable对象来封装要执行的工作。

我知道匿名内部类看起来相当混乱,但它们在Java中相当普遍,因为它们是语言中最接近closures的语言。因此,对你来说最好的做法是IMO,咬紧牙关,使用Activity.runOnUiThread(Runnable),并提醒自己,优雅是程序员的眼中的东西。