Несколько IntentService или одна служба
Я немного запутался в различии между IntentService и Service. Я понимаю, что IntentService имеет рабочую очередь, но можно ли использовать несколько IntentService для одной службы?
Вот пример того, что я имею в виду. Скажем, я хочу, чтобы мое приложение извлекало данные из 3 источников. Должен ли я запускать службу, которая запускает три потока, каждый из которых вытягивается из соответствующего источника? Или я должен запустить три отдельных IntentServices?
Ответы
Ответ 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