【问题标题】:App crashing right away after starting service via ContextCompat.startForegroundService()通过 ContextCompat.startForegroundService() 启动服务后应用程序立即崩溃
【发布时间】:2018-10-05 22:42:08
【问题描述】:

我的应用目前仍以 SDK 25 为目标 我正在尝试替换我的后台服务以便能够以 SDK 26 为目标。 为了做到这一点,我现在用

启动我的 IntentService
ContextCompat.startForegroundService()

如果我正确理解了文档,我将有 5 秒的时间在服务上调用 startForeground()。

这样做时效果很好。 但有时我的服务没有任何工作要做,所以它立即退出(onHandleIntent() 没有做任何事情),但应用程序崩溃并出现以下错误

AndroidRuntime: FATAL EXCEPTION: 
Process: com.myAPPPackage, PID: 3855
android.app.RemoteServiceException: Context.startForegroundService() did not then call Service.startForeground()
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1768)
    at android.os.Handler.dispatchMessage(Handler.java:106)
    at android.os.Looper.loop(Looper.java:164)
    at android.app.ActivityThread.main(ActivityThread.java:6494)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)

在这种情况下,5 秒的延迟是怎么回事? 我可以看到服务 onDestroy() 方法在调用 ContextCompat.startForegroundService() 后的几毫秒内被调用

知道为什么应用会这样崩溃吗?

【问题讨论】:

    标签: android android-intentservice foreground-service


    【解决方案1】:

    知道为什么应用会这样崩溃吗?

    你没有打电话给startForeground()

    但有时我的服务没有任何工作要做,所以它立即退出

    您需要先致电startForeground()

    或者在调用startForegroundService() 之前先确定是否有任何工作要做,然后再调用startForegroundService()。这样,如果不需要前台服务,您就不必费心拨打startForegroundService()

    如果我正确理解了文档,我将有 5 秒的时间在服务上调用 startForeground()。

    可以,但这并不意味着您可以跳过拨打startForeground()。您必须致电startForeground()。您只有五秒钟的时间这样做。我的猜测是,这是为了避免 startForegroundService() 被滥用。

    【讨论】:

    • 那太糟糕了。谢谢
    猜你喜欢
    • 1970-01-01
    • 2013-12-13
    • 1970-01-01
    • 2015-06-09
    • 1970-01-01
    • 2020-01-25
    • 1970-01-01
    • 1970-01-01
    • 2013-12-19
    相关资源
    最近更新 更多