我创建了一个带有Worker的Android应用程序,它可以将手机的电池电量报告给远程服务器。worker在主活动OnCreate
中注册,如下
PeriodicWorkRequest pwr = new PeriodicWorkRequest.Builder(BatteryReportWorker.class,
15, TimeUnit.MINUTES).setConstraints(
new Constraints.Builder()
.setRequiredNetworkType(NetworkType.CONNECTED)
.build())
.build();
workManager.enqueueUniquePeriodicWork("BatteryReportWorker", ExistingPeriodicWorkPolicy.REPLACE, pwr);
这在一段时间内工作得很好,但在不到一天的时间内,Worker停止向后端发送报告。简单地打开应用程序,不做任何事情,立即唤醒工人和另一个报告立即发送,这让我认为安卓只是不运行它了。为什么Android会在一段时间后停止运行周期性的工作请求?如果工作经理决定停止运行工人,我怎么去尝试找出原因呢?
我已经检查了几件事:
- 这不是三星电池睡眠的问题,因为它也发生在谷歌Pixel手机上
- 我也相信这不是应用程序的暂停功能,因为它需要不到一天的应用程序停止发送报告
WorkManager坚持节能功能和最佳实践,如打盹模式,所以你不必担心它。
从Android 6开始,为了节省电池,引入了瞌睡模式,它将后台任务延迟到下一个维护窗口或设备插入或使用时。
按此来理解小睡模式