我正在尝试在 android 8 及更高版本中运行foregroundService。它成功启动,并且当应用程序位于前台或设备不空闲时,会显示前台粘性通知。问题是一旦设备空闲,Android 就会决定终止显示此日志的服务
Stopping service due to app idle
Run Code Online (Sandbox Code Playgroud)
根据文档,只要有用户可见的通知,服务就很少会被杀死:(无论如何,我设置了一个每 15 分钟触发一次的警报,并尝试在服务未运行时再次启动该服务,但无法启动前台服务日志记录信息
Service.startForeground() not allowed due to bg restriction
Run Code Online (Sandbox Code Playgroud)
通过谷歌搜索:我认为这与 android AppOps 管理有关。显然应该有一个许可RUN_ANY_IN_BACKGROUND,allow但实际上就ignore我而言。我检查使用
adb shell cmd get package.name RUN_ANY_IN_BACKGROUND
Run Code Online (Sandbox Code Playgroud)
只是为了测试,我allow再次手动将其设置为。但一段时间后,当应用程序空闲时,操作系统将其再次设置为忽略,并且服务再次停止。
无论如何,我可以检查我是否违反了一些强制忽略此RUN_ANY_IN_BACKGROUND标志的限制?
对于某些上下文:该服务应该检测用户的睡眠,因此它必须从用户的睡眠时间到醒来时间整夜运行。我通过调用启动服务context.startForegroundService(intent),然后在onStartCommand方法中调用startForeground传递通知。onStartCommand方法始终返回START_REDELIVER_INTENT常量。