Android Oreo 服务限制会影响作业调度程序的 intentservices 吗?
Android Oreo service restriction affect intentservices from job schedulers?
由于 Oreo 中引入了新的后台服务限制,我很难找到一个地方来阐明 IntentServices 在应用程序处于后台时是否仍可以从 JobScheduler 启动。
我有一个基于地理围栏的非常重要的功能,需要在围栏被打破后 运行 一个 intentService。我花了很长时间将其设置为在栅栏被打破并且该应用程序处于 DOZE 状态时为牛轧糖排队。当作业最终被 OS 重新打开 window 时 运行 网络连接重新打开时,我在 intentService 中一个接一个地剥离每个作业。我现在可以不再这样做吗,因为我在技术上启动了一项服务,而应用程序不在前台,或者因为我正在使用 JobScheduler,这仍然被允许吗?
阅读这篇文章[探索 Android Oreo 的后台执行限制]
您不应假设您的应用能够从作业启动服务。特别是,应用程序在其作业执行时经常仍处于后台状态,并且在后台状态下调用 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 及以下使用后台服务。
由于 Oreo 中引入了新的后台服务限制,我很难找到一个地方来阐明 IntentServices 在应用程序处于后台时是否仍可以从 JobScheduler 启动。
我有一个基于地理围栏的非常重要的功能,需要在围栏被打破后 运行 一个 intentService。我花了很长时间将其设置为在栅栏被打破并且该应用程序处于 DOZE 状态时为牛轧糖排队。当作业最终被 OS 重新打开 window 时 运行 网络连接重新打开时,我在 intentService 中一个接一个地剥离每个作业。我现在可以不再这样做吗,因为我在技术上启动了一项服务,而应用程序不在前台,或者因为我正在使用 JobScheduler,这仍然被允许吗?
阅读这篇文章[探索 Android Oreo 的后台执行限制]
您不应假设您的应用能够从作业启动服务。特别是,应用程序在其作业执行时经常仍处于后台状态,并且在后台状态下调用 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 及以下使用后台服务。