我使用WorkManager
执行了一些重复性任务,并且在白天积极使用手机的时候,它工作得很好(每段时间或早或晚运行我的代码)。在夜间,它会跳过很多时间,我想知道为什么会发生这种情况以及如何解决这个问题。
fun startService() {
val constraintsBuilder = Constraints.Builder()
constraintsBuilder.setRequiredNetworkType(NetworkType.CONNECTED)
val constraints = constraintsBuilder.build()
val work = PeriodicWorkRequest.Builder(
HttpWorker::class.java,
40, TimeUnit.MINUTES,
15, TimeUnit.MINUTES
).setConstraints(constraints)
.addTag("TAG_WORKER")
.build()
WorkManager.getInstance().enqueueUniquePeriodicWork(
HttpWorker::class.java.simpleName,
ExistingPeriodicWorkPolicy.REPLACE,
work
)
}
结果如下:
--->运行09:14
--->运行09:54(40分钟)
--->运行10:33(39分钟)
--->运行11:53(80分钟)
--->运行12:33(39分钟)
...
--->运行00:35
--->运行01:20(45分钟)
--->运行03:39(139min)!!!
--->运行07:14(215分钟)!!!
--->运行07:47(30分钟)
--->运行08:26(39分钟)
...
这肯定与设备活动有关,还请注意,我为我的应用禁用了节电功能(我的设备是2018 Android 9.0的Samsung Galaxy新型号)。在夜间(完全不使用设备的情况下),我该怎么做才能忽略很多跳过的时间段。
p.s。我的应用程序不在Google Play上,因此没有任何问题(但没有root用户)
答案 0 :(得分:0)
根据文档
Public Constraints.Builder setRequiresDeviceIdle(boolean requireDeviceIdle) 设置设备是否应该空闲以运行WorkRequest。 默认值为false。
true:如果设备必须处于空闲状态才能运行工作
因此,如果添加此约束。您的工作将在晚上进行!
constraintsBuilder.setRequiresDeviceIdle(true)