我理解的是,网络操作是不允许的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();