代码之家  ›  专栏  ›  技术社区  ›  Phil Kulak

Java线程消息传递

  •  1
  • Phil Kulak  · 技术社区  · 16 年前

    我正在写一个Android应用程序。我有一个主方法,它使用一个匿名的内部可运行类创建和运行一个新线程。run()方法完成后,在它的父类(在主线程中)上调用一个方法,该方法调用notifyDataSetChanged(),以便主线程可以重新绘制新数据。这导致了各种各样的问题(viewroot$calleddfromwronthreadeexception)。

    问题是,从工作线程调用的这个方法在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();
        }
    }
    
    1 回复  |  直到 16 年前
        1
  •  2
  •   Lauri Lehtinen    16 年前

    您是否尝试用调用UI更新代码 Activity#runOnUiThread ?像这样:

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