Остановите фоновый сервис, только если больше нет работы - PullRequest
0 голосов
/ 24 октября 2018

Я использую сервис для обработки намерений с ContentResolver в фоновом режиме.Каждый новый вызов намерения запускает службу, и служба останавливается сама после завершения обработки.

Это создает проблему, когда новое намерение запускает запуск службы, но предыдущий запуск службы все еще обрабатывается, в результате чего новый запуск прерывается до того, как его обработка завершена.

Я думал о добавлении некоторого статического nunInstances в сервис и остановке его только на 1.

Другой вариант - оставить сервис запущенным.Я пытался найти информацию о его действительности и побочных эффектах, но ничего не получилось.

1 Ответ

0 голосов
/ 25 октября 2018

Вы можете использовать IntentService, который действует как рабочая очередь.Вы можете отправить его на работу с startService() столько раз, сколько захотите.Работы выполняются серийно, одна за другой.Когда последний рабочий блок был выполнен, Service останавливается.

Или вы используете обычный Service и ставите работу в очередь в onStartCommand().Если у вас больше нет работы, вы звоните stopSelf().

ПРИМЕЧАНИЕ: Android не создаст более одного экземпляра Service.Ваша забота о наличии нескольких экземпляров Service не обязательна.Если что-то вызывает startService(), а Service уже запущен, Android не создает новый экземпляр Service.Он просто вызывает onStartCommand() на работающем экземпляре и передает Intent в качестве параметра.

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