在启动应用程序时,应用程序启动应执行某些网络任务的服务。定位到API级别26后,我的应用程序无法在后台在Android 8.0上启动服务。
引起原因:java.lang.IllegalStateException:不允许启动服务意图{cmp = my.app.tt / com.my.service}:应用程序在后台uid UidRecord {90372b1 u0a136 CEM空闲过程:1 seq(0,0 ,0)}
据我了解,它涉及:后台执行限制
如果针对Android 8.0的应用尝试在不允许创建后台服务的情况下尝试使用该方法,则startService()方法现在将引发IllegalStateException。
“ 在不允许的情况下 ”-实际上是什么意思?以及如何解决。我不想将服务设置为“前台”
允许的情况是一个临时白名单,其中后台服务的行为与Android O之前的行为相同。
在某些情况下,后台应用会被放置在临时白名单中几分钟。当应用程序进入白名单时,它可以不受限制地启动服务,并且其后台服务可以运行。当应用处理用户可见的任务时,该应用将被列入白名单,例如:
- 处理高优先级的Firebase云消息(FCM)消息。
- 接收广播,例如SMS / MMS消息。
- 从通知中执行PendingIntent。
- 在VPN应用提升自身为前台之前启动VpnService。
来源:https://developer.android.com/about/versions/oreo/background.html
因此,换句话说,如果您的后台服务不满足白名单要求,则必须使用新的JobScheduler。它与后台服务基本相同,但是它会定期调用,而不是在后台连续运行。
如果您使用的是IntentService,则可以更改为JobIntentService。请参阅下面的 @kosev 答案。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句