Несколько IntentService или один Сервис - PullRequest
18 голосов
/ 13 июня 2011

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

Вот пример того, что я имею в виду.Допустим, я хочу, чтобы мое приложение получало данные из 3 источников.Должен ли я запустить службу, которая запускает три потока, каждый из которых извлекает данные из своего источника?Или я должен запустить три отдельных IntentServices?

Ответы [ 3 ]

11 голосов
/ 13 июня 2011

IntentService - это просто удобный класс для написания сервисов, работающих в шаблоне производитель-потребитель. Это сервисы, предназначенные для выполнения различных задач подряд, а затем остановки. Сервисы не обязательно являются IntentServices, такими как сервисы, которые должны оставаться в живых, например, демоны.

Таким образом, вы должны задаться вопросом, близка ли ваша служба к рабочему потоку, если это так, используйте IntentServices, иначе просто производные от Service.

Ваш второй вопрос заключался в том, следует ли группировать все 3 услуги в службу 3 в 1. Ответ в том, что это зависит от того, как вы используете свои источники данных: если вы используете их в целом, то сгруппируйте их в один сервис. Если они используются отдельно, вы можете создать сервис для каждого из них, надеясь предоставить более легкий сервис, если используется только один источник данных, а не другой. Но если вы используете все 3 источника данных, каждый в службе, то это будет тяжелее, чем использование одной службы.

6 голосов
/ 13 июня 2011

Насколько я понимаю, разница между intentService и Service заключается в том, что intentService создает рабочий поток для его запуска, в то время как служба запускается в основном потоке своего процесса хостинга.Кроме того, intentService остановится сам по завершении работы, а служба продолжит работу до тех пор, пока не будет вызван stopSelf или stopService.

Если 3 источникам данных необходимо обмениваться информацией друг с другом, поместите ихвсе в одной и той же службе, в противном случае держите их отдельно, потому что, если один источник данных не работает, он оставит работающую полную службу вместо одной простой службы.

0 голосов
/ 09 декабря 2015

Чтобы разрешить запуск нескольких задач одновременно из основного потока, необходимо предоставить управляемый набор потоков. Используйте ThreadPoolExecutor для управления несколькими потоками одновременно:

http://developer.android.com/training/multiple-threads/create-threadpool.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...