1

随着Oreo引入新的后台服务限制,我很难找到一个地方来澄清IntentServices是否仍然可以在应用程序后台运行时从JobScheduler启动。Android Oreo服务限制会影响来自作业调度程序的intentservices?

我必须根据各地地理界线之后需要一个栅栏坏了运行的intentService一个非常重要的特点。我花了很长时间把它设置成排队工作,当围栏被打破并且应用程序在用于牛轧糖的DOZE中时。当网络连接窗口重新打开时,当作业最终由操作系统运行时,我在intentService中依次分离每个作业。我现在不能在技术上开始服务,而应用程序不在前台,或者由于我使用JobScheduler,这仍然被允许,所以我不能再这么做了吗?

回答

0

所以我做了下班像素一些测试,并在周末发现了一些有趣的事情。 Geofences仍然触发应用程序后台和手机锁定,但打盹限制仍然适用。我的工作调度人员处理了打瞌睡的限制,而在工作中解雇的intentService也起作用了!地理围栏的触发因相应的新定位限制而延迟。所以我的帖子中的主要问题得到了回答。

我注意到了一件非常有趣的事情。我有一个在后台运行的常规非绑定服务,它使用融合的位置API并每隔5秒获取一次位置。在8.0仿真器中,这个服务在应用程序停止后大约5秒钟停止。然而,在我的实际像素上,服务从未实际停止过,只是超级延迟。似乎要等待打盹的时间间隔,一次返回该地点并重新入睡。我会在我有时间之前测试更多,然后将它们发布为对感兴趣的任何人的编辑。

0

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

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

+1

在我问这个问题之前,我实际上正在阅读这篇文章。它与这个新限制的相当多99%的资源相同。它说JobScheduler是一个替代方案,但没有详细介绍如何使用它或将IntentServices产生的细节。 – Le2e410

+0

@Le2e410如果我没有错,那么在本文中明确提到“首先要注意的是,如果当你的应用程序不在前台时试图调用startService(),那么IllegalStateException将会是抛出“。所以如果您尝试在后台启动服务,则会抛出异常,而不管启动此服务的组件如何。 –

+0

是的,那正是我的想法,但我不确定是否因为操作系统是启动工作的人,这是一项工作。这让我想知道当地理围栏被破坏并且OS将pendingIntent发送到您的intentService时会发生什么。当你的应用处于前台时,geofences似乎只能工作了。如果我在这里没有错过任何东西,那真是一个非常糟糕的疏忽。 – Le2e410

2

您不应该认为您的应用程序能够从工作中启动服务。特别是,应用程序在执行作业时经常处于后台状态,在后台状态下调用startService()会引发异常。当然,拨打startForegroundService()总是合法的;尽管显然这也有UI的含义。

JobIntentService明确旨在替换IntentService的方式,与Android O +背景的限制兼容。你应该考虑切换到那个,而不是使用传统的IntentService支持类。

相关问题