我了解到 GUI 线程上不允许进行网络操作。我可以。但是为什么在对话框按钮单击回调上使用此代码仍然会产生NetworkOnMainThreadException
?
new Thread(new Runnable() {
@Override
public void run() {
heavyAndTimeConsumingOperation();
}
}).run();
也许我不会以这种方式产生新线程?
我了解到 GUI 线程上不允许进行网络操作。我可以。但是为什么在对话框按钮单击回调上使用此代码仍然会产生NetworkOnMainThreadException
?
new Thread(new Runnable() {
@Override
public void run() {
heavyAndTimeConsumingOperation();
}
}).run();
也许我不会以这种方式产生新线程?
你需要打电话.start()
,不是.run()
。
.run()
是您覆盖的实际执行的方法。
.start()
是系统提供的实际启动线程的方法。
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();