通过ContextCompat.startForegroundService()启动服务后,应用立即崩溃

时间:2018-10-05 22:42:08

标签: android android-intentservice foreground-service

我的应用目前仍针对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秒怎么办? 我可以看到,在调用ContextCompat.startForegroundService()

之后,调用了服务onDestroy()方法就像几毫秒。

知道为什么应用程序会那样崩溃吗?

1 个答案:

答案 0 :(得分:2)

  

知道为什么应用程序会那样崩溃吗?

您没有呼叫startForeground()

  

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

您需要先致电startForeground()

或者调用startForegroundService()的内容是什么,请先确定是否有任何工作要做,然后再调用startForegroundService()。这样,如果不需要前台服务,就不必打扰startForegroundService()

  

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

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