NetworkOnMainThreadException в службе

Я получаю NetworkOnMainThreadException в моем Service класс, который по своей природе не имеет смысла, потому что сервисы, насколько я понимаю, являются фоновыми процессами.

В методе Service я вызываю статический вспомогательный метод для загрузки данных. Я использую DefaultHttpClient, а также.

Что тут происходит?

4 ответа

Решение

onStartCommand() работает в потоке пользовательского интерфейса в Service, Попробуйте использовать IntentService или в качестве альтернативы использовать любой другой метод Service (Handler/Runnable, AsyncTask).

Я просто решил эту проблему с помощью этого:

public int onStartCommand(Intent intent, int flags, int startId) {

    RefreshDBAsync task = new RefreshDBAsync(this);
    task.execute();

    return START_STICKY;
}

RefreshDBAsync делает запрос к серверу каждые 5 минут

Все обратные вызовы служб выполняются в основном потоке, то есть в потоке пользовательского интерфейса. Если вы хотите выполнить фоновую работу, либо запустите Thread, либо используйте onHandleIntent IntentService (Intent i).

Исключение, которое выдается, когда приложение пытается выполнить сетевую операцию в своем основном потоке.

Это выбрасывается только для приложений, ориентированных на Honeycomb SDK или выше. Приложениям, нацеленным на более ранние версии SDK, разрешено создавать сети в своих основных потоках цикла событий, но это сильно не рекомендуется.

http://developer.android.com/reference/android/os/NetworkOnMainThreadException.html

Другие вопросы по тегам