Когда использовать JobIntentService против WorkManager? - PullRequest
1 голос
/ 14 января 2020

Google недавно устарел IntentService с: https://android.googlesource.com/platform/frameworks/base.git/+/6f8b09029932dfd24945202017639754b00acc2e

В документах для IntentService теперь говорится:

 * @deprecated IntentService is subject to all the
 *   <a href="/preview/features/background.html">background execution limits</a>
 *   imposed with Android 8.0 (API level 26). Consider using {@link androidx.work.WorkManager}
 *   or {@link androidx.core.app.JobIntentService}, which uses jobs
 *   instead of services when running on Android 8.0 or higher.

Так в чем же различия между JobIntentService и WorkManager и какой рекомендуется при каких обстоятельствах?

Google даже не упоминает JobIntentService на этой странице, они только упоминают WorkManager: https://developer.android.com/guide/background

1 Ответ

3 голосов
/ 14 января 2020

Начиная с Android Oreo, мы больше не можем поддерживать нормальные службы в фоновом режиме, потому что система:

1 убьет службу примерно через одну минуту, если само приложение переходит в фоновый режим после запуска service

2-исключить, если служба была запущена, когда само приложение находится в фоновом режиме

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

Теперь для JobIntentService:

Будет действовать как обычный IntentService на устройствах до Oreo (потому что мы не не имеет никаких ограничений) и на Oreo + вместо этого будет использовать jobScheduler для достижения поведения, аналогичного IntentService. Он просто начинает работу как можно скорее , планирует свою работу через JobScheduler, и JobScheduler может выбрать отложить , которые работают немного, но его работа, скорее всего, будет отличаться или прерывается в ситуациях с нехваткой памяти, в режиме ожидания или когда они достигают ограничения по времени (~ 10 минут)

С JobIntentService выполнение некоторых конфигураций невозможно , как, например, определение конкретно, при каких обстоятельствах мы хотим, чтобы наши задания запускались (например, когда устройство заряжается или если у нас есть соединение WIFI), однако с помощью workmanager мы можем установить эти ограничения.

Использовать WorkManager для заданий, которые имеют некоторые Ограничения , или для заданий / работ, которые являются транзакционными , не выполняются , или для заданий, которые могут произойти в будущем , и используйте JobIntentService, когда вы хотите скопировать поведение обычного IntentService на Android Oreo + и для заданий, которые могут быть слегка задержаны и могут занять более 1 минута, но меньше 10 минут.

Надеюсь, я ответил на ваш вопрос.

С уважением

...