JobScheduler и JobIntentService

Я работаю над приложением, которое поддерживает Android API версии 21 и выше. Большинство моих фоновых задач были разработаны с помощью JobScheduler, представленного в API 21.

Недавно я столкнулся с тем, что JobIntentService представляет API 26. В документации говорится: «При работе на Android O или более поздней версии работа будет отправляться как задание через JobScheduler.enqueue. При работе на более старых версиях платформы он будет использовать контекст. запуск службы."

Что я хочу понять, так это то, почему Android использует JoScheduler только из API 26, а не из API 21. Есть ли разница в JobScheduler в API 26 и выше от той, что была представлена ​​в API 21. Нужно ли мне менять какой-либо код чтобы повысить эффективность/избежать ошибок, преобразовав мои фоновые задания для использования JobIntentService вместо планировщиков заданий. Думаю, я не понимаю намерения того, чего пытается достичь JobIntentService.


person tacticurv    schedule 15.01.2018    source источник


Ответы (1)


Я не понимаю намерения того, чего пытается достичь JobIntentService

JobIntentService предназначен для замены комбинации IntentService/WakefulBroadcastReceiver для фоновых задач, которые могут занять больше минуты (но меньше десяти) и для которых вы не хотите использовать службу переднего плана.

почему Android использует JoScheduler только из API 26, а не из API 21

На это может ответить только Google, поэтому вопросы вида «почему разработчик X принял решение Y?» не подходят для переполнения стека.

Обратите внимание, что проблема «более минуты» возникает из-за фоновых ограничений на уровне API 26+; в предыдущих версиях такого ограничения не было.

Есть ли отличие JobScheduler в API 26 и выше от того, что было представлено в API 21?

Были внесены изменения, в том числе некоторые расширения, которые позволяют работать JobIntentService.

Нужно ли мне изменить какой-либо код для повышения эффективности/избежания ошибок, преобразовав мои фоновые задания для использования JobIntentService вместо планировщиков заданий?

Я не знаю, почему вы перешли со своего JobService на JobIntentService. JobIntentService заменяет IntentService, а не JobService.

person CommonsWare    schedule 15.01.2018