通知被屏蔽时 foreground service(前台服务)会出现什么运行问题?
前台服务启动前用户已屏蔽应用通知的运行结果说明
- 不同Android系统版本的表现差异
- Android 8.0(API 26)及以上版本
该版本开始系统强制要求前台服务绑定通知,启动后5秒内必须调用startForeground()方法并传入合法的通知对象、通知渠道ID。即使用户提前屏蔽了应用的全部通知或者对应前台服务的通知渠道权限,只要应用按照规范完成上述调用流程,前台服务就可以正常运行,仅关联的通知不会在通知栏展示,不会触发运行时异常。
如果应用未按要求调用startForeground(),无论通知权限是否开启,系统都会直接终止服务,并抛出ForegroundServiceDidNotStartInTimeException类型的运行时异常。 - Android 7.1(API 25)及以下版本
该版本无强制通知渠道限制,也不会对前台服务的通知展示做额外校验,只要应用按要求调用启动前台服务的相关方法,即便通知被用户完全屏蔽,服务依然可以正常运行,无崩溃或异常报错。
- Android 8.0(API 26)及以上版本
- 额外注意事项
- 部分国内厂商定制ROM对前台服务逻辑做了修改,可能存在通知权限被屏蔽时,直接禁止前台服务启动、或是运行一段时间后强制回收服务的情况,属于厂商定制规则,和原生Android逻辑不一致。
- 应用在启动前台服务前可以先检测通知权限,若权限被关闭可引导用户手动开启,避免前台服务的运行状态无法被用户感知,被系统判定为恶意后台服务被回收。
内容的提问来源于stack exchange,提问作者Taha Sami
相关产品推荐
相关产品推荐

