Каковы различия между JobIntentService и IntentService? - PullRequest
0 голосов
/ 11 ноября 2018

Я не понимаю, в чем разница между этими двумя API. Я имею в виду, когда использовать первый. Почему есть JobIntentService? Заранее спасибо

Ответы [ 3 ]

0 голосов
/ 24 июня 2019

Оба работают одинаково, но единственное различие с JobIntentService заключается в том, что JobIntentService перезапускается, если приложение уничтожается во время выполнения службы. OnHandleWork () get перезапускается после того, как приложение get убито.

0 голосов
/ 13 июля 2019

Я бы порекомендовал прочитать эту статью, объясняющую разницу между сервисом намерений и сервисом намерений . Когда мы впервые посмотрим на эти термины 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

0 голосов
/ 22 января 2019

По сути, они выполняют одну и ту же роль. Разница заключается в том, что IntentService является базовым классом для Service, который обрабатывает явный асинхронный запрос с Intent по требованию; он запускается через startService (передавая Intent для службы) следовательно, служба запускается по вашему желанию, из Android Oreo JobIntentService она также выполняет обработку работы, однако она может продолжать работать в более старых версиях, а также упрощает процесс. Более того, 2 API имеют одинаковые результаты. Для выполнения работы из Орео используется, если JobScheduler.enqueue уже в более старых версиях платформы, будет использоваться Context.startService

Надеюсь, это поможет.

...