使用Andorid中的WorkManager跳过的定期工作请求

时间:2019-10-10 07:07:13

标签: android android-workmanager

我使用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用户)

1 个答案:

答案 0 :(得分:0)

根据文档

setRequiresDeviceIdle

  

Public Constraints.Builder setRequiresDeviceIdle(boolean   requireDeviceIdle)       设置设备是否应该空闲以运行WorkRequest。       默认值为false。

     

true:如果设备必须处于空闲状态才能运行工作

因此,如果添加此约束。您的工作将在晚上进行!

constraintsBuilder.setRequiresDeviceIdle(true)