1

Я понял, что сетевая операция не разрешена в потоке графического интерфейса. Для меня нормально. Но почему использование этого кода в диалоговом окне click callback все еще вызывает NetworkOnMainThreadException?avoiding 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(); 

 Смежные вопросы

  • Нет связанных вопросов^_^