android报错:java.lang.IllegalStateException: Not allowed to start service Intent

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sinat_38184748/article/details/90181285

android报错:java.lang.IllegalStateException: Not allowed to start service Intent

错误

今天测试扔我一条崩溃信息:

Caused by: java.lang.IllegalStateException: Not allowed to start service Intent { cmp=xxx }: app is in background uid UidRecord{xxx u0a136 CEM idle procs:1 seq(0,0,0)}

这能难得倒我吗?
一看就知道是后台服务启动错误,把服务放置前台就可以了,easy

其实谷歌了一下下。。。。
https://stackoverflow.com/questions/46445265/android-8-0-java-lang-illegalstateexception-not-allowed-to-start-service-inten
问题是Android8.0以上不允许创建后台服务。

解决方法

1

最简单就是直接开启前台服务
在你的服务类的onCreate里将服务设置到前台就可以了

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
       startForeground(1, new Notification()); 
}

当然了这种方法会在Android5.0和6.0的手机的状态栏上显示啥啥啥正在运行。
有些人可能不想要。
那就参考下面这个方法

2

来源于这里的方法
在这里插入图片描述
先是修改你的manifest文件里的Service配置

<service android:name=".YourService"
         android:permission="android.permission.BIND_JOB_SERVICE"/>

然后将你的service类的修改继承,改成extends JobIntentService
然后添加以下代码

    public static final int JOB_ID = 1;

    public static void enqueueWork(Context context, Intent work) {
        enqueueWork(context, YourService.class, JOB_ID, work);
    }

    @Override
    protected void onHandleWork(@NonNull Intent intent) {
        // your code
    }

而启动服务就修改成如下方法。

YourService.enqueueWork(context, new Intent());

不过我测试了下,在onStartCommand()里的内容不执行。还没找到什么原因。
希望知道的朋友可以帮忙解析下。

完事

猜你喜欢

转载自blog.csdn.net/sinat_38184748/article/details/90181285
今日推荐