【发布时间】:2020-09-17 19:05:15
【问题描述】:
我使用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(139 分钟)!!!
--->运行 07:14(215 分钟)!!!
--->运行 07:47(30 分钟)
--->运行 08:26(39 分钟)
...
这肯定与设备活动有关,还请注意,我为我的应用禁用了省电功能(我的设备是三星 Galaxy 2018 Android 9.0 的新型号)。我应该怎么做才能在夜间(根本不使用设备时)忽略那些跳过的时间段。
附言。我的应用不在 Google Play 上,所以任何黑客都没有问题(但没有 root)
【问题讨论】:
-
我认为应该是设备制造商的问题,当设备进入打盹模式时,它会禁用除 RIL/网络服务之外的所有服务。尝试与不同的设备制造商并检查问题是否仍然存在。
-
仔细阅读本文了解打盹模式、待机模式
-
@Quicklearner - 是的,有打盹模式,但我为我的应用禁用了省电功能。也许我需要做一些额外的事情来强制我的应用即使在打瞌睡模式下也能做定期工作(我的应用不在 Google Play 上,所以黑客没问题)
标签: android android-workmanager