你瞅啥?
在Android O中,有一个新的背景限制。尝试启动startService()时,将获得IlleagalStateException,因此现在应使用startForegroundService(),但是如果通过此新方法启动服务,则会在屏幕截图中看到类似的错误。为避免此异常,您需要在startForegroundService()之后有5秒钟的时间来创建startForeground(),以通知用户您正在后台工作。否则将崩溃出现这样的崩溃信息:
android.app.RemoteServiceException: Context.startForegroundService() did not then call Service.startForeground()
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1961)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:198)
at android.app.ActivityThread.main(ActivityThread.java:7015)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:523)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:850)
那么我们该如何解决呢?通过查阅资料发现,解决起来也没有那么复杂,看看怎么个套路!
//适配8.0以上的服务转前台服务 清单文件AndroidManifest中有配置 android.permission.FOREGROUND_SERVICE
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
//适配8.0机制
context.startForegroundService(intent);
} else {
context.startService(intent);
}
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) { // 注意notification也要适配Android 8 哦
startForeground(ID, new Notification());// 通知栏标识符 前台进程对象唯一ID
}
有上述步骤代码之后,我们就会发现,头不疼了,脸不懵逼了,吃嘛嘛香了!
网友评论