我知道GUI线程上不允许网络操作。对我没问题。但是为什么在Dialog按钮单击回调上使用此代码仍然会产生NetworkOnMainThreadException
?
new Thread(new Runnable() {
@Override
public void run() {
heavyAndTimeConsumingOperation();
}
}).run();
也许我不会以这种方式产生一个新线程?
答案 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();