Android 避免NetworkOnMainThreadException

Android 避免NetworkOnMainThreadException,android,multithreading,exception,networking,networkonmainthread,Android,Multithreading,Exception,Networking,Networkonmainthread,我知道GUI线程上不允许网络操作。好的。但为什么在对话框按钮单击回调上使用此代码仍会产生NetworkOnMainThreadException new Thread(new Runnable() { @Override public void run() { heavyAndTimeConsumingOperation(); } }).run(); 也许我没有用这种方式生成新线程?您需要调用.start(),而不是.run

我知道GUI线程上不允许网络操作。好的。但为什么在对话框按钮单击回调上使用此代码仍会产生
NetworkOnMainThreadException

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

也许我没有用这种方式生成新线程?

您需要调用
.start()
,而不是
.run()

.run()
是您重写的实际执行的方法。

.start()
是一种系统提供的方法,可以实际启动线程。

您需要调用
.start()
,而不是
.run()

.run()
是您重写的实际执行的方法。

.start()
是一种系统提供的方法,可以实际启动线程。

SLaks是正确的,但对于Android来说,有一种更微妙的方法:

newasynctask(){
@凌驾
受保护的Void doInBackground(Void…参数){
//做重活
}
@凌驾
受保护的void onPostExecute(void结果){
//在繁重的东西之后再做UI
}
}.execute();

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

newasynctask(){
@凌驾
受保护的Void doInBackground(Void…参数){
//做重活
}
@凌驾
受保护的void onPostExecute(void结果){
//在繁重的东西之后再做UI
}
}.execute();

Hmmm。。。我能用一个关于时空矩阵的新问题来改变这个愚蠢的问题吗。。。我能用一个关于时空矩阵的新问题来改变这个愚蠢的问题吗?更多信息,请查看我的。更多信息,请查看我的。
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();