1

我了解到 GUI 线程上不允许进行网络操作。我可以。但是为什么在对话框按钮单击回调上使用此代码仍然会产生NetworkOnMainThreadException

new Thread(new Runnable() {                         
  @Override
  public void run() {
    heavyAndTimeConsumingOperation();
  }
}).run();

也许我不会以这种方式产生新线程?

4

2 回答 2

9

你需要打电话.start(),不是.run()

.run()是您覆盖的实际执行的方法。
.start()是系统提供的实际启动线程的方法。

于 2012-06-18T14:18:00.693 回答
4

SLaks 是对的,但对于 Android 来说,还有一种更微妙的方式:AsyncTask

new AsyncTask<Void, Void, Void>(){

    @Override
    protected Void doInBackground(Void... params){
        //Do heavy stuff
    }

    @Override
    protected void onPostExecute(Void result){
        //Do UI stuff after heavy stuff
    }
}.execute();
于 2012-06-18T14:22:16.863 回答