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