Android 8.0 启动 出错 Not allowed to start service Intent { 包名} app is in background uid UidRecord

/ Android / 没有评论 / 4313浏览
FATAL EXCEPTION: Thread-13
Process: com.project.purse, PID: 12962
java.lang.IllegalStateException: Not allowed to start service Intent { flg=0x20 cmp=com.android.browser/cn.jpush.android.service.DaemonService }: app is in background uid null
at android.app.ContextImpl.startServiceCommon(ContextImpl.java:1701)
at android.app.ContextImpl.startService(ContextImpl.java:1657)
at android.content.ContextWrapper.startService(ContextWrapper.java:644)
at cn.jpush.android.service.l.run(Unknown Source:108)
at java.lang.Thread.run(Thread.java:784)

 

错误原因是因为:Android 8.0 不再允许后台service直接通过startService方式去启动。

所以改为startForegroundService方式启动即可。

但是在代码中如果没有使用到startService的方式时,还是会有这个启动报错的情况下,可能是另一种原因。

极光推送,jpush-android-2.1.3.jar版本的。

因为项目是前两年的项目了,一直维护更新至今,但最近老有用户8.0版本的启动报错。但在测试机上6.0版本的却没有问题,去搜索后发现貌似是8.0不能startService方式去启动服务,但是我代码中又没有使用。查看错误信息时,每次都是在Jpush下报的错,想着是不是极光的原因,就把极光的初始化操作//掉了,是没报错了,但是极光还要用,就去更新了极光版本到jpush-android-3.1.6.jar

使用时也没有报错了。但是还要再调一遍,好麻烦啊!!!

在AndroidManifest.xml文件查看激光配置时,发现了一个Server服务:

<!-- since 1.8.0 option 可选项。用于同一设备中不同应用的JPush服务相互拉起的功能。 -->
<!-- 若不启用该功能可删除该组件,将不拉起其他应用也不能被其他应用拉起 -->
<service
    android:name="cn.jpush.android.service.DaemonService"
    android:enabled="true"
    android:exported="true">
    <intent-filter>
        <action android:name="cn.jpush.android.intent.DaemonService"/>
 
        <category android:name="com.project.purse"/>
    </intent-filter>
</service>

看备注是拉起其他极光相关的服务,就给掉了,sdk还是用的jpush-android-2.1.3.jar,启动下,没有报错了。。。