避免NetworkOnMainThreadException(avoiding NetworkOnM

2019-07-30 00:35发布

我理解的是,网络操作是不允许的GUI线程上。 对我没问题。 但是,为什么在一个对话框按钮单击回调使用此代码仍然产生NetworkOnMainThreadException

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

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

Answer 1:

你需要调用.start()而不是.run()

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



Answer 2:

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


文章来源: avoiding NetworkOnMainThreadException