【发布时间】:2018-03-29 22:38:09
【问题描述】:
我的应用将在MainActivity 的onCreate 中调用startForegroundService(intent)。我将startForeground(ON_SERVICE_CONNECTION_NID, notification) 放在onCreate 和Service 的startCommand 中。
但我仍然偶尔会收到此错误。
Exception android.app.RemoteServiceException: Context.startForegroundService() did not then call Service.startForeground()
android.app.ActivityThread$H.handleMessage (ActivityThread.java:1775)
android.os.Handler.dispatchMessage (Handler.java:105)
android.os.Looper.loop (Looper.java:164)
android.app.ActivityThread.main (ActivityThread.java:6541)
java.lang.reflect.Method.invoke (Method.java)
com.android.internal.os.Zygote$MethodAndArgsCaller.run (Zygote.java:240)
com.android.internal.os.ZygoteInit.main (ZygoteInit.java:767)
怎么会这样?
onCreate 或 startCommand 是否有可能在 5 秒内没有被调用?
如果是这样,我们应该如何调用startForegroundService而不出错?
2017 年 12 月 9 日更新
不知道为什么大家都说和这个问题一样:Context.startForegroundService() did not then call Service.startForeground() 你甚至可以在那边找到我的评论。
它不同的原因是你可以在这个问题的第一行看到。我已将startForegroundService 和startForeground 放在正确的位置,但它仍然随机显示此错误。
这是 Google 问题跟踪器:https://issuetracker.google.com/issues/67920140
在此之前停止服务会导致崩溃。
这是关于服务生命周期的另一个问题。 服务关闭后,断言可能会被错误触发。
【问题讨论】:
-
你可以在这里发布一些代码
-
我认为用纯文本解释问题已经足够清楚了。你能告诉我你想知道什么吗?所以我可以添加更多信息。
-
看到这个答案stackoverflow.com/questions/44425584/… 确切的问题在这里
-
@Anup 不一样。我已经在您的链接和@UltimateDevil 的链接中评论了该答案。正如我在问题中描述的那样,我已经将
startForegroundService和startForeground放在了正确的位置。 -
@swooby 谢谢!实际上,我已经创建了另一个线程。那个也被关闭了。即使我提供了他们需要的所有信息和附件。他们说它“按预期工作”。之后,我发现
startForegroundService(intent)不应该在活动的onCreate中。所以我把它移到onPause,它只在活动处于后台状态后将服务提升到前台。而startForeground(ON_SERVICE_CONNECTION_NID, notification)应该只在服务的onCreate内。最后报错停止。
标签: android foreground-service