避免NetworkOnMainThreadException

时间:2012-06-18 14:16:08

标签: android multithreading exception networking networkonmainthread

我知道GUI线程上不允许网络操作。对我没问题。但是为什么在Dialog按钮单击回调上使用此代码仍然会产生NetworkOnMainThreadException

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

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

2 个答案:

答案 0 :(得分:9)

您需要致电.start(),而不是.run()

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

答案 1 :(得分: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();