如何让Android ForegroundService在较新版本的Android中无限期运行?

如何让Android ForegroundService在较新版本的Android中无限期运行?,android,kotlin,android-service,foreground-service,Android,Kotlin,Android Service,Foreground Service,我将从一所计算机科学学院毕业,作为一个文凭项目,我想构建一个安卓应用程序,监控用户的电池,然后可以使用root来禁用手机充电。第一步是监控电池和用户的使用模式,并向他们提供一些统计数据 为了监控电池,我使用了一个前台服务,该服务通过广播接收器不时查询电池状态,以查看操作\u电池\u更改的事件。但是我在保持前台服务的活力方面遇到了问题。它持续工作10-15分钟,但最终被系统杀死(我想可能是因为事件很少发生)。我还尝试使用协同程序延迟查询,并每1分钟手动执行一次,然后更频繁地执行,比如30秒,但我的

我将从一所计算机科学学院毕业,作为一个文凭项目,我想构建一个安卓应用程序,监控用户的电池,然后可以使用root来禁用手机充电。第一步是监控电池和用户的使用模式,并向他们提供一些统计数据

为了监控电池,我使用了一个前台服务,该服务通过广播接收器不时查询电池状态,以查看
操作\u电池\u更改的事件。但是我在保持前台服务的活力方面遇到了问题。它持续工作10-15分钟,但最终被系统杀死(我想可能是因为事件很少发生)。我还尝试使用协同程序延迟查询,并每1分钟手动执行一次,然后更频繁地执行,比如30秒,但我的服务最终还是会被终止,并且在不久的将来不会再次启动,即使是使用
START\u STICKY
启动。我还尝试通过AlarmManager设置警报,以便不时重新启动我的服务,但我仍然无法获得一致的电池数据模式,以便能够分析和构建项目核心的估算算法

我在OnePlus 5T上运行Android 9作为我的测试设备,要让前台服务保持活力真的很困难。但我观察到,有一些应用程序,比如
Mi-Fit
Mi-Band-Tools
,甚至电池应用程序,它们在停止时能够以某种方式重新启动前台服务。我可以看到我的屏幕亮起,显示其中一个应用程序已停止,但当我打开我的通知时,我可以看到该应用程序的前台通知仍然存在,因此它可能会立即重新启动(但当我的应用程序发生同样的情况时,我的前台通知不再存在)

我还尝试在我的服务中重写
ondestory
,并从那里重新启动它,但似乎没有调用
ondestory
方法,系统可能只是在需要更多内存时终止进程。我也不能使用
BroadcastReceiver
s注册在
Manifest
中,因为它们在Android 8+上不再工作(大多数教程建议这样做)

关于这个话题,我读了所有我能接触到的东西,但都没有真正起作用。。最好的方法是通过
AlarmManager
设置警报,但即使在几个小时后也停止工作,但不知何故,其他应用程序仍在继续工作,我很想知道在较新的Android版本(最好是Android 8或更高版本)中该如何设置警报


谢谢大家!

使用Workmanager启动周期性工作,检查前台服务是否正在运行,如果没有,则启动
doWork()方法中的服务