Я бы порекомендовал прочитать эту статью, объясняющую разницу между сервисом намерений и сервисом намерений . Когда мы впервые посмотрим на эти термины Service
, IntentService
, JobIntentService
, они будут выглядеть почти одинаково - так или иначе, они будут выполнять некоторые операции в фоновом режиме (что пользователь не замечает). Но есть немного различий в том, как они работают,
Сервис - работает в том же основном потоке, который вызывает этот сервис и выполняет некоторые фоновые операции. Для любой длительной операции, выполняемой в основном потоке, рекомендуется создать новый поток и выполнить задание (например, Handler
), не влияя на производительность основного потока.
Недостаток: работает в основном потоке
IntentService - Служба Intent также помогает выполнять некоторые длительные (неопределенные) фоновые задачи. Единственное отличие состоит в том, что он создает новый поток для выполнения этой задачи и не запускается в основном потоке. Выполняет задание на это onHandleIntent
.
Недостаток: задание, переданное IntentService, может быть потеряно при удалении приложения
JobIntentService - Служба намерений очень похожа на IntentService, но с небольшими преимуществами, например, приложение может завершить эту работу в любое время и запустить ее с самого начала, как только приложение будет создано заново.
Но из Oreo, если приложение работает в фоновом режиме, не разрешается запускать службу в фоновом режиме. Android просит нас явно запустить службу с помощью content.startForegroundService
вместо context.startService
, и когда служба запускается в течение 5 секунд, ее необходимо привязать к уведомлению, чтобы с ним связался элемент пользовательского интерфейса.
Ссылка: https://developer.android.com/about/versions/oreo/background.html