服务前台崩溃问题



我在后台运行服务时遇到了这个问题。它会在后台自动崩溃。我找不到问题在哪里

Fatal Exception: android.app.RemoteServiceException: Context.startForegroundService() did not then call Service.startForeground(): 
ServiceRecord{e4c7ef5 u0 com.clap.find.my.mobile.alarm.sound/.service.BatteryAlertService}
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2137)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:237)
at android.app.ActivityThread.main(ActivityThread.java:7948)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1075)

请参考这个链接,你一定会知道发生了什么和崩溃的原因。

读这

如果你可以选择低于标准,那么你可能可以解决你的修复。

为什么这个问题发生是因为Android框架不能保证你的服务在5秒内启动,但另一方面框架有严格的限制,前台通知必须在5秒内触发,而不检查框架是否已经尝试启动服务。

这绝对是一个框架问题,但并不是所有面临这个问题的开发人员都在尽最大努力:

  1. startForeground通知必须同时出现在onCreate中和onStartCommand,因为如果你的服务已经创建,并且你的activity试图重新启动它,onCreate
  2. 通知ID不能为0,否则即使原因不同也会发生相同的崩溃。
  3. stopSelf不能在start前台之前调用。

有了以上3个,这个问题可以减少一点,但仍然不是一个修复,真正的修复或让我们说解决方法是将你的目标sdk版本降级到25。

最新更新