通过 ContextCompat.startForegroundService() 启动服务后应用程序立即崩溃
App crashing right away after starting service via ContextCompat.startForegroundService()
我的应用目前仍以 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() 方法
知道为什么应用会这样崩溃吗?
Any idea why the app is crashing like that?
您没有打电话给 startForeground()
。
But sometimes my service doesn't have any work to do, so it just exits right away
您需要先致电startForeground()
。
或者让调用 startForegroundService()
的任何东西在调用 startForegroundService()
之前先确定是否有任何工作要做。这样,如果不需要前台服务,您就不必费心调用 startForegroundService()
。
If I understand the documentation correctly I then have 5 seconds to call startForeground() on the service.
是的,但这并不意味着您可以跳过调用startForeground()
。您必须 呼叫startForeground()
。你只有五秒钟的时间来这样做。我的猜测是,这是为了避免滥用 startForegroundService()
.
我的应用目前仍以 SDK 25 为目标 我正在尝试替换我的后台服务以便能够以 SDK 26 为目标。 为此,我现在使用
启动我的 IntentServiceContextCompat.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() 方法知道为什么应用会这样崩溃吗?
Any idea why the app is crashing like that?
您没有打电话给 startForeground()
。
But sometimes my service doesn't have any work to do, so it just exits right away
您需要先致电startForeground()
。
或者让调用 startForegroundService()
的任何东西在调用 startForegroundService()
之前先确定是否有任何工作要做。这样,如果不需要前台服务,您就不必费心调用 startForegroundService()
。
If I understand the documentation correctly I then have 5 seconds to call startForeground() on the service.
是的,但这并不意味着您可以跳过调用startForeground()
。您必须 呼叫startForeground()
。你只有五秒钟的时间来这样做。我的猜测是,这是为了避免滥用 startForegroundService()
.