Подтвердить что ты не робот

Несколько IntentService или одна служба

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

Ответ 3

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

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