Flutter Kotlin开发 后台服务去除startForeground粘性通知崩溃求助
问题原因
你遇到的崩溃完全是Android系统的前台服务强制规则导致的,核心错误信息已经在日志中明确给出:android.app.RemoteServiceException: Context.startForegroundService() did not then call Service.startForeground()
- Android 8.0(API 26)及以上版本引入了前台服务的强制校验逻辑:只要你通过
Context.startForegroundService()方法启动服务,系统就要求服务启动后5秒内必须调用Service.startForeground()绑定前台通知,否则会直接抛出该异常杀死服务。 - 你注释掉
startForeground调用后,就违反了这个规则,所以会触发崩溃,你的Runnable自然也不会执行。切后台、杀死应用、下拉通知栏这些操作会触发系统校验服务状态,因此会直接触发异常。
解决方案
你不需要前台服务的前提下,可以按以下方式修改:
- 首先修改服务的启动逻辑:不要用
startForegroundService()启动你的AutoOffersService,改用普通的Context.startService()启动即可,这样就不会触发必须调用startForeground的强制校验。 - 适配普通后台服务的系统限制:Android 8.0及以上版本中,普通后台服务在应用退到后台后,系统会在几分钟内主动回收终止服务,你已经配置了WorkManager做兜底重启,完全符合你的业务预期,不需要额外处理。
- 如果你后续有需要临时保活又不想打扰用户的场景,也可以保留
startForeground调用,给通知设置渠道重要性为IMPORTANCE_MIN,同时开启静音,这样通知不会弹窗提示,只会出现在通知栏的折叠列表中,既符合系统规则也不会干扰用户。
内容的提问来源于stack exchange,提问作者Praful Bagai
相关产品推荐
相关产品推荐

