IntentService + startForeground vs JobIntentService - PullRequest
0 голосов
/ 11 ноября 2018

Поскольку ограничения на выполнение фона Android Oreo установлены, в документах рекомендуется выполнить рефакторинг от IntentService s до JobIntentService.

https://developer.android.com/about/versions/oreo/background

JobIntentService запускается сразу как IntentService ниже Oreo, но планирует задание на Oreo +

https://developer.android.com/reference/android/support/v4/app/JobIntentService

В каких случаях имеет смысл запускать обычный IntentService в качестве переднего плана Service с постоянным уведомлением, а когда JobIntentService лучше?

Один недостаток, который я вижу в JobIntentService, заключается в том, что он начинается не сразу.

Ответы [ 2 ]

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

Если вы хотите сделать длительную операцию, например, Music Player, используйте Foreground Service с уведомлением.потому что JobIntentService имеет ограничение по времени выполнения, как JobScheduler.(10 минут)

Если вы считаете, что пользователю не нужно знать о вашей работе, вы можете использовать JobIntentService без уведомления.

Вам не нужно беспокоиться о режиме ожидания, если пользователь активно использует ваше приложение.

В некоторых случаях для режима Doze, в соответствии с https://www.bignerdranch.com/blog/diving-into-doze-mode-for-developers/

, Light-Doze начинает срабатывать вскоре после того, какЭкран выключен, и устройство не заряжается, подождите всего пару минут, прежде чем применить ограничения, просто чтобы убедиться, что пользователь прекратил пользоваться своим телефоном

Например, пользователь выключил экран во время вычисленийчто-то.Ваша задача выполнена, и вы хотите запустить фоновый сервис.В этом случае ваш JobIntentService может быть отложен, поскольку устройство может находиться в режиме ожидания.

Однако, если вы хотите немедленно выполнить фоновую операцию, используйте ForegrounService с WakeLock, потому что ForegroundService не работает, когда экран выключен.

0 голосов
/ 11 ноября 2018

На передний план не влияет Doze, но вам все равно придется использовать блокировку от пробуждения, если вам нужно продолжить выполнение задачи, когда экран выключен.

JobIntentService (который использует JobScheduler) управляет блокировками пробуждения для вас, но у вас меньше контроля над началом работы.

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

Я бы использовал JobIntentService в сочетании с AlarmManager для планирования задач с низким приоритетом, таких как периодическое обновление данных виджета.

...