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?
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.
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