Android 避免NetworkOnMainThreadException
我知道GUI线程上不允许网络操作。好的。但为什么在对话框按钮单击回调上使用此代码仍会产生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
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();