【问题标题】:Android 9 (!) IllegalStateException startService from Foreground (!) AppAndroid 9 (!) IllegalStateException startService from Foreground (!) App
【发布时间】:2020-05-05 16:08:43
【问题描述】:

我仅在无法重现的 Android 9 设备上调查了几个 IllegalStateExceptions。首先,我认为这取决于在后台启动服务的限制,但是第一个它们是在 Android 8 中引入的,我在 Android 8 上没有得到这些异常,第二个堆栈跟踪显示该服务是从 onCreate 启动的,所以它在前台,不是吗?

完整的堆栈跟踪:

java.lang.RuntimeException: 
at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:3430)
at android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:3614)
at android.app.servertransaction.LaunchActivityItem.execute (LaunchActivityItem.java:86)
at android.app.servertransaction.TransactionExecutor.executeCallbacks (TransactionExecutor.java:108)
at android.app.servertransaction.TransactionExecutor.execute (TransactionExecutor.java:68)
at android.app.ActivityThread$H.handleMessage (ActivityThread.java:2199)
at android.os.Handler.dispatchMessage (Handler.java:112)
at android.os.Looper.loop (Looper.java:216)
at android.app.ActivityThread.main (ActivityThread.java:7625)
at java.lang.reflect.Method.invoke (Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:524)
at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:987)

caused by java.lang.IllegalStateException:

at android.app.ContextImpl.startServiceCommon (ContextImpl.java:1810)
at android.app.ContextImpl.startService (ContextImpl.java:1765)
at android.content.ContextWrapper.startService (ContextWrapper.java:664)
at com.max.power.ServiceManager.doStartService (ServiceManager.java:121)
at com.max.power.ServiceManager.start (ServiceManager.java:82)
at com.max.power.ActivityLogin.setupSocketService (ActivityLogin.java:259)
at com.max.power.ActivityLogin.onCreate (ActivityLogin.java:156)
at android.app.Activity.performCreate (Activity.java:7458)
at android.app.Activity.performCreate (Activity.java:7448)
at android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1286)
at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:3409)

doStartService (ServiceManager.java:121) 行是:

mActivity.startService(new Intent(mActivity, mServiceClass));

谁能想象那里发生了什么?

任何帮助将不胜感激。谢谢!

【问题讨论】:

    标签: android service android-9.0-pie


    【解决方案1】:
      Intent serviceIntent = new Intent(context,Service.class);
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                    startForegroundService(serviceIntent);
                }
                else
                {
                    startService(serviceIntent);
                }
    

    "如果您的应用针对 API 级别 26 或更高级别,系统会限制使用或创建后台服务,除非应用本身在前台。如果应用需要创建前台服务,则应用应调用 startForegroundService() . 该方法创建一个后台服务,但该方法向系统发出信号,表明该服务将自己提升到前台。服务创建后,该服务必须在 5 秒内调用其 startForeground() 方法。"

    https://stackoverflow.com/a/46138653/11982611 回答了为什么它适用于奥利奥

    【讨论】:

    • 谢谢。但它不起作用。我发现后台执行限制不会影响我使用的绑定服务。在我的 startService() bindService() 被调用之后。我不相信与执行限制有关......我必须补充一点,我在 Android 9 模拟器上没有遇到异常。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-21
    • 2015-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-26
    相关资源
    最近更新 更多