Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/180.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Oreo服务限制会影响来自作业调度器的IntentService吗?_Android_Android Intentservice_Android Jobscheduler_Android 8.0 Oreo - Fatal编程技术网

Android Oreo服务限制会影响来自作业调度器的IntentService吗?

Android Oreo服务限制会影响来自作业调度器的IntentService吗?,android,android-intentservice,android-jobscheduler,android-8.0-oreo,Android,Android Intentservice,Android Jobscheduler,Android 8.0 Oreo,随着Oreo引入了新的后台服务限制,我很难找到一个地方来澄清在应用程序后台运行时,是否仍然可以从作业调度器启动IntentService 我有一个基于地理围栏的非常重要的功能,需要在围栏被破坏后运行intentService。我花了很长时间来设置它,以便在围栏被打破,应用程序正在打瞌睡准备牛轧糖时,排队等待工作。当作业最终由操作系统运行时,当网络连接窗口重新打开时,我会在intentService中一个接一个地剥离每个作业。我现在可以不再这样做了吗?因为我在技术上启动一项服务,而应用程序不在前台

随着Oreo引入了新的后台服务限制,我很难找到一个地方来澄清在应用程序后台运行时,是否仍然可以从作业调度器启动IntentService


我有一个基于地理围栏的非常重要的功能,需要在围栏被破坏后运行intentService。我花了很长时间来设置它,以便在围栏被打破,应用程序正在打瞌睡准备牛轧糖时,排队等待工作。当作业最终由操作系统运行时,当网络连接窗口重新打开时,我会在intentService中一个接一个地剥离每个作业。我现在可以不再这样做了吗?因为我在技术上启动一项服务,而应用程序不在前台,还是因为我使用的是JobScheduler,所以仍然允许这样做?

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


希望它能回答您的问题

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


JobIntentService
明确旨在以与Android O+后台限制兼容的方式取代IntentService。您应该考虑切换到该类,而不是使用传统的IntentService支持类。

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

对于API 26及以上版本,请使用
startForegroundService()


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

在问这个问题之前,我实际上正在阅读这篇文章。这与这个新限制的99%的资源差不多相同。它说JobScheduler是一种替代方案,但没有详细说明如何使用它,也没有详细说明从它派生IntentService的细节。@Le2e410如果我没有错的话,那么在本文中明确提到“首先要注意的最重要的一点是,如果您试图调用startService()当应用程序不在前台时,将抛出非法状态异常。“。因此,如果您尝试在后台启动服务,而不管启动此服务的组件是什么,都会引发异常。是的,这就是我所想的,但我不确定由于操作系统是启动作业的操作系统,因此它是否是一种解决方法。这让我想知道当地理围栏被破坏,操作系统将PendingEvent发送到您的intentService时会发生什么。似乎只有当你的应用程序在前台时,geofences才会起作用?如果我在这里没有遗漏什么的话,那真是一个糟糕的疏忽。@Le2e410您可以使用带有START\u STICKY的前台服务,如文档中所述。后台执行限制将不适用于前台服务