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

问题描述 投票:0回答:1

我从一所计算机科学学院毕业,作为文凭项目,我想构建一个Android应用程序,该程序可以监视用户的电池,然后可以使用root禁用手机充电。第一步是监视电池和用户的使用方式,并向他们提供一些统计信息。

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

我正在OnePlus 5T上运行Android 9作为测试设备,并且很难保持前台服务的正常运行。但是我观察到有些应用程序,例如Mi FitMi Band Tools甚至是this电池应用程序,可以在停止运行时设法以某种方式重新启动其前台服务。我可以看到屏幕亮起,并向我显示这些应用程序之一已停止,但是当我打开通知时,我可以看到该应用程序的前台通知仍然存在,因此它可能立即重新启动了(但是当同一件事发生时)发生在我的应用程序上,我的前台通知不存在了。

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

我阅读了可以解决该问题的所有内容,但没有真正起作用。.最好的方法是通过AlarmManager设置警报,但即使在几个小时后停止工作,但其他应用仍然可以正常工作,我我有兴趣了解如何在更新的Android版本(最好是Android 8及更高版本)中执行此操作。

谢谢!

android kotlin android-service foreground-service
1个回答
0
投票

[使用Workmanager启动PeriodicWork,并检查前台服务是否正在运行,如果未在doWork()方法内启动该服务,则>]

© www.soinside.com 2019 - 2024. All rights reserved.