我的应用目前仍针对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()方法就像几毫秒。知道为什么应用程序会那样崩溃吗?
答案 0 :(得分:2)
知道为什么应用程序会那样崩溃吗?
您没有呼叫startForeground()
。
但是有时我的服务没有任何工作要做,所以它会立即退出
您需要先致电startForeground()
。
或者调用startForegroundService()
的内容是什么,请先确定是否有任何工作要做,然后再调用startForegroundService()
。这样,如果不需要前台服务,就不必打扰startForegroundService()
。
如果我正确理解了文档,那么我有5秒钟的时间在服务上调用startForeground()。
是的,但这并不意味着您可以跳过呼叫startForeground()
。您必须致电startForeground()
。您只有五秒钟的时间。我的猜测是,这是为了避免滥用startForegroundService()
的方式。