NetworkOnMainThreadException в службе - PullRequest
4 голосов
/ 01 февраля 2012

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

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

Что здесь происходит?

Ответы [ 4 ]

5 голосов
/ 01 февраля 2012

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

0 голосов
/ 22 апреля 2017

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

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

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

    return START_STICKY;
}

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

0 голосов
/ 26 июля 2012

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

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

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

0 голосов
/ 01 февраля 2012

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

...