当前位置: 首页 > 知识库问答 >
问题:

WorkManager处于ANDROID时跳过定期工作请求

闻昊英
2023-03-14

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

结果如下所示:

---

---

---

---

---

...

---

---

---

---

---

---

...

这肯定与设备活动有关,还请注意,我禁用了应用程序的节能功能(我的设备是2018年Android 9.0推出的三星Galaxy新款)。我该怎么做才能忽略夜间的许多跳过的时段(当设备根本不使用时)。

附言:我的应用程序不在谷歌播放,所以没有任何黑客问题(但没有根)

共有1个答案

顾穆冉
2023-03-14

根据文件

解决方案

公共约束。生成器设置要求设备空闲(布尔要求设备空闲)设置设备是否应该空闲,以便工作请求运行。默认值为false。

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

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

constraintsBuilder.setRequiresDeviceIdle(true)
 类似资料:
  • 我需要每X分钟从服务器同步一次数据,即使在关闭应用程序之后也是如此。我使用WorkManger和PeriodicWorkRequest每X分钟触发一次。这是每X分钟触发一次,即使我们关闭了应用程序。退出应用程序后我面临的问题是如何访问静态类或变量? 示例代码: 同步类。反恐精英: 常数。反恐精英: 当应用程序处于前台和后台状态,但由于DependencyService类为null而在终止状态下失败

  • WorkManager是一个库,用于对满足其约束后保证执行的工作进行排队。 因此,在查看了Constraints类之后,我还没有找到任何函数来为工作添加时间约束。例如,我希望在早上8:00AM开始执行一个工作(该工作可以是OneTimeWorkRequest或PerioadWorkRequest两种类型中的任何一种)。如何添加约束以使用WorkManager调度此工作。

  • 如果Spring批处理作业业务逻辑出现ArrayIndexOutOfBoundsException,我必须从我的自定义映射器FieldSetMapper of reader FlatFileItemReader中跳过一个自定义异常(CSVFieldMappingException)。为此,我添加了作业步骤的配置,如下所示。 但这不起作用,因为每当我抛出自定义RunTimeException时,就会

  • 我面临以下问题:我的类继承了。这个工作器的逻辑足够复杂,事实上调用了里面的一堆其他例程并捕获()几个的结果,例如: 问题: 我可以以某种方式将收集的值(值是简单的原始对象)返回/放置给? 或者作为一种选择-我如何在其他类中收听/收集这些-在我的之外? 因为,

  • 我正在这样做: 但是请求在服务器上不起作用。。。在服务器上,我应该看到发送的数据,但我看不到它们 我也试过这个: 而且它是有效的。。。有什么问题吗?

  • 我从某个时候起就被这个问题困扰着。 我使用的是spring batch 3.0.7 问题是在ItemWriter中的一个记录中出现org.springframework.dao.DataIntegrityViolationExcue的情况下,组块(组块大小=10)中的其余记录也不会插入到数据库中,即使在提供了skipPolicy之后(对于所有异常返回true)。 我的理解是,如果在提交整个大块时出