java.lang.IllegalStateException:Not allowed to start service Intent

java.lang.IllegalStateException: Not allowed to start service Intent  {}: app is in background uid UidRecord{} 应用处于后台的时候会出现这个异常。
发布时间: 2018-03-29 20:18

回答:

Android 8.0 出现的行为变更。

Android 8.0 为提高电池续航时间而引入的变更之一是,当您的应用进入已缓存状态时,如果没有活动的组件,系统将解除应用具有的所有唤醒锁。

此外,为提高设备性能,系统会限制未在前台运行的应用的某些行为。具体而言:

  • 现在,在后台运行的应用对后台服务的访问受到限制。

  • 应用无法使用其清单注册大部分隐式广播(即,并非专门针对此应用的广播)。

默认情况下,这些限制仅适用于针对 O 的应用。不过,用户可以从 Settings 屏幕为任意应用启用这些限制,即使应用并不是以 O 为目标平台。

参考:https://developer.android.com/about/versions/oreo/android-8.0-changes.html#atap

后台服务限制:处于空闲状态时,应用可以使用的后台服务存在限制。 这些限制不适用于前台服务,因为前台服务更容易引起用户注意。

广播限制:除了有限的例外情况,应用无法使用清单注册隐式广播。 它们仍然可以在运行时注册这些广播,并且可以使用清单注册专门针对它们的显式广播。

用户可以从 Settings 屏幕为任意应用启用这些限制。应用都可以使用 JobScheduler 作业克服这些限制。

在JobIntentService中enqueue的时候,调用的是startServie方法。所以会被系统禁止在后台启动。可以调用 startForeground()

或者使用JobScheduler来替换JobIntentService的实现类。


我对此仍有疑问!继续追问