1

我明白,GUI线程上不允许网络操作。对我来说还可以。但是为什么在对话框按钮上使用这个代码点击回调仍然会产生NetworkOnMainThreadException避免NetworkOnMainThreadException

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

也许我不会产生一个新的线程这种方式?

+1

看看我的** [博客文章'NetworkOnMainThreadException'](http://www.androiddesignpatterns.com/2012/06/app-force-close-honeycomb-ics.html)**更多信息。 –

回答

9

您需要拨打.start()而不是.run()

.run()是您重写的方法实际执行。
.start()是实际启动线程的系统提供的方法。

+3

嗯......我可以用一个新的关于时空矩阵的方法来改变这个愚蠢的问题吗? – lorenzoff

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();