我正在尝试在Android 8及更高版本中运行foregroundService
。它成功启动,并且当应用程序处于前台或设备不空闲时,前台粘性通知会显示。问题是设备闲置后,Android决定终止显示此日志的服务
Stopping service due to app idle
根据doc,只要有对用户服务可见的通知,就应该很少被杀死:(无论如何,我设置了一个警报,每15分钟触发一次,如果服务未运行但尝试重新启动服务,但是它无法启动前台服务记录以下消息
Service.startForeground() not allowed due to bg restriction
在Google上进行了一些搜索:我认为这与android AppOps管理有关。显然有一个权限RUN_ANY_IN_BACKGROUND
应该是allow
,但在我的情况下实际上是ignore
。我使用
adb shell cmd get package.name RUN_ANY_IN_BACKGROUND
仅出于测试目的,我再次将其手动设置为allow
。但是一段时间后,当应用程序进入空闲状态时,操作系统会将其设置为再次忽略,然后服务再次停止。
无论如何,我都可以检查是否违反了一些限制,这些限制迫使此RUN_ANY_IN_BACKGROUND
标志忽略?
在某些情况下:该服务是用来检测用户的睡眠的,因此它必须从用户的睡眠时间到唤醒时间整夜运行。
我通过调用context.startForegroundService(intent)
来启动服务,然后在onStartCommand
方法中调用startForeground
传递通知。 onStartCommand
方法始终返回START_REDELIVER_INTENT
常量。
答案 0 :(得分:0)
我通过以下操作解决了这个问题: 设置->应用和通知->我的应用->电池->背景限制
在对话框片段中,选择“删除”以删除背景限制(如果已启用)。