2010-06-16 95 views
1

我正在编写一个Android应用程序。我有一个主要方法,它使用匿名内部Runnable类创建并运行一个新线程。 run()方法完成后,调用它的父类(在主线程中)调用notifyDataSetChanged()的方法,以便主线程可以重新绘制新数据。这造成了各种麻烦(ViewRoot $ CalledFromWrongThreadException)。Java主题消息传递

问题是,从工作线程调用的此方法位于在UI线程中创建的类中。不应该在UI线程上运行吗?或者我错过了什么?

这里是什么我谈论一些代码:

public class Mealfire extends Activity { 
    @Override 
    public void onCreate(Bundle icicle) { 
     (new Thread() { 
      public void run() { 
       // Do a bunch of slow network stuff. 
       update(); 
      } 
     }).start(); 
    } 

    private void update() { 
     myAdapter.notifyDatasetChanged(); 
    } 
} 

回答

2

你有没有打过电话与Activity#runOnUiThread的UI更新代码?像这样:

private void update() { 
    runOnUiThread(new Runnable() { 
     public void run() { 
      myAdapter.notifyDatasetChanged(); 
     } 
    } 
} 
+0

这是_exactly_我​​所需要的。谢谢! – 2010-06-16 05:47:55