• Android studio 使用startService报错:IllegalStateException


    Android 8.0启动service报错:java.lang.RuntimeException和java.lang.IllegalStateException

    错误信息:

     java.lang.RuntimeException: Unable to start receiver cn.edu.zut.broadservice.MyReceiver: java.lang.IllegalStateException: Not allowed to start service Intent { cmp=cn.edu.zut.broadservice/.MyService }: app is in background uid UidRecord{b67c471 u0a86 RCVR idle change:uncached procs:1 seq(0,0,0)}
            at android.app.ActivityThread.handleReceiver(ActivityThread.java:3388)
            at android.app.ActivityThread.access$1200(ActivityThread.java:199)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1661)
            at android.os.Handler.dispatchMessage(Handler.java:106)
            at android.os.Looper.loop(Looper.java:193)
            at android.app.ActivityThread.main(ActivityThread.java:6669)
            at java.lang.reflect.Method.invoke(Native Method)
            at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
         Caused by: java.lang.IllegalStateException: Not allowed to start service Intent { cmp=cn.edu.zut.broadservice/.MyService }: app is in background uid UidRecord{b67c471 u0a86 RCVR idle change:uncached procs:1 seq(0,0,0)}
            at android.app.ContextImpl.startServiceCommon(ContextImpl.java:1577)
            at android.app.ContextImpl.startService(ContextImpl.java:1532)
            at android.content.ContextWrapper.startService(ContextWrapper.java:664)
            at android.content.ContextWrapper.startService(ContextWrapper.java:664)
            at cn.edu.zut.broadservice.MyReceiver.onReceive(MyReceiver.java:24)
            at android.app.ActivityThread.handleReceiver(ActivityThread.java:3379)
            at android.app.ActivityThread.access$1200(ActivityThread.java:199) 
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1661) 
            at android.os.Handler.dispatchMessage(Handler.java:106) 
            at android.os.Looper.loop(Looper.java:193) 
            at android.app.ActivityThread.main(ActivityThread.java:6669) 
            at java.lang.reflect.Method.invoke(Native Method) 
            at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) 
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858) 
    

    错误原因:

    • 如果针对 Android 8.0 的应用尝试在不允许其创建后台服务的情况下使用 startService() 函数,则该函数将引发一个 IllegalStateException
    • 新的 Context.startForegroundService() 函数将启动一个前台服务。现在,即使应用在后台运行,系统也允许其调用 Context.startForegroundService()。不过,应用必须在创建服务后的五秒内调用该服务的 startForeground() 函数。
    • 如需了解详细信息,请参阅后台执行限制

    解决方案:

    在 原来启动service的地方,把startService();替换为下面的代码。

    Intent intent = new Intent(context, MyService.class);
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        context.startForegroundService(intent);
    } else {
       context.startService(intent);
    }
    

    并且在service的类里面加入(若加入上面代码后正常运行可忽略此内容)

    @Override
    public void onCreate() {
        super.onCreate();
       if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
           startForeground(1,new Notification()); 
    }
    

    参考 :参考地址

  • 相关阅读:
    数据可视化之分析篇(三)Power BI总计行错误,这个技巧一定要掌握
    数据可视化之分析篇(二)Power BI 数据分析:客户购买频次分布
    数据可视化之分析篇(一)使用Power BI进行动态帕累托分析
    机器学习实战基础(三):创建线性回归器
    数据可视化实例(十五):有序条形图(matplotlib,pandas)
    scrapy 源码解析 (五):启动流程源码分析(五) Scraper刮取器
    4sum, 4sum closest
    3sum, 3sum closest
    两数之和-数据结构设计 · Two Sum
    (hash map)Two Sum, sorted(排序+双指针)closest,小于或大于的对数,组成不同的对数
  • 原文地址:https://www.cnblogs.com/tassel/p/10105598.html
Copyright © 2020-2023  润新知