avoiding NetworkOnMainThreadException

試著忘記壹切 提交于 2019-12-02 08:40:19

问题


I've understood that a network operation is not allowed on the GUI thread. Ok for me. But why using this code on a Dialog button click callback still produce NetworkOnMainThreadException ?

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

perhaps i'm not spawning a new thread this way?


回答1:


You need to call .start(), not .run().

.run() is the method you override that actually executes.
.start() is a system-provided method that actually starts a thread.




回答2:


SLaks is right, but for Android there is a more delicate way: 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();


来源:https://stackoverflow.com/questions/11084755/avoiding-networkonmainthreadexception

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!