在应用程序启动时,应用程序启动应该执行某些网络任务的服务。以 API 级别 26 为目标后,我的应用程序无法在后台在 Android 8.0 上启动服务。
原因:java.lang.IllegalStateException:不允许启动服务 Intent { cmp=my.app.tt/com.my.service }:应用处于后台 uid UidRecord{90372b1 u0a136 CEM idle procs:1 seq(0,0 ,0)}
据我了解,它与: 后台执行限制 有关
如果面向 Android 8.0 的应用尝试在不允许创建后台服务的情况下使用该方法,则 startService() 方法现在会引发 IllegalStateException。
“ 在不允许的情况下”-实际上是什么意思?以及如何解决它。我不想将我的服务设置为“前台”
原文由 phnmnn 发布,翻译遵循 CC BY-SA 4.0 许可协议
允许的情况是临时白名单,其中后台服务的行为与 Android O 之前的行为相同。
来源: https ://developer.android.com/about/versions/oreo/background.html
所以换句话说,如果您的后台服务不符合白名单要求,您必须使用新的 JobScheduler 。它与后台服务基本相同,但它会定期调用,而不是在后台连续运行。
如果您使用的是 IntentService,则可以更改为 JobIntentService。请参阅 下面的@kosev 的回答。