Android Oreo 服务限制会影响作业调度程序的 intentservices 吗?

Android Oreo service restriction affect intentservices from job schedulers?

由于 Oreo 中引入了新的后台服务限制,我很难找到一个地方来阐明 IntentServices 在应用程序处于后台时是否仍可以从 JobScheduler 启动。

我有一个基于地理围栏的非常重要的功能,需要在围栏被打破后 运行 一个 intentService。我花了很长时间将其设置为在栅栏被打破并且该应用程序处于 DOZE 状态时为牛轧糖排队。当作业最终被 OS 重新打开 window 时 运行 网络连接重新打开时,我在 intentService 中一个接一个地剥离每个作业。我现在可以不再这样做吗,因为我在技术上启动了一项服务,而应用程序不在前台,或者因为我正在使用 JobScheduler,这仍然被允许吗?

阅读这篇文章[探索 Android Oreo 的后台执行限制]

https://medium.com/exploring-android/exploring-background-execution-limits-on-android-oreo-ab384762a66c希望它能回答你的问题

您不应假设您的应用能够从作业启动服务。特别是,应用程序在其作业执行时经常仍处于后台状态,并且在后台状态下调用 startService() 将引发异常。当然,调用startForegroundService()总是合法的;尽管显然这也有 UI 含义。

JobIntentService 明确旨在以与 Android O+ 后台限制兼容的方式替换 IntentService。您应该考虑切换到它而不是使用旧的 IntentService 支持 class.

对于 API 25 岁及以下,使用后台服务或 IntentService 进行常规 startService() 调用。

对于 API 26 岁及以上使用 startForegroundService()

您还可以选择使用 androidx.core.app.JobIntentService,它为 API 26+ 使用 JobScheduler,为 API 25 及以下使用后台服务。