WorkManager 在 Android 中不定期工作

问题描述 投票:0回答:3

我正在创建一个 Android 通知应用程序,在设置闹钟后每 15 分钟发出一次通知。

它第一次调用,并显示通知,但 Workmanager 不会每 15 分钟调用一次。


 val myWorkRequest = PeriodicWorkRequestBuilder<ReminderWorker>(15, TimeUnit.MINUTES).build()

        WorkManager.getInstance(applicationContext)
            .enqueueUniquePeriodicWork("work", ExistingPeriodicWorkPolicy.REPLACE, myWorkRequest)

android kotlin android-workmanager
3个回答
0
投票

您需要将initialDelay添加到构建器中

 val myWorkRequest: PeriodicWorkRequest = PeriodicWorkRequest.Builder(
        MySimpleWorker::class.java, 3, TimeUnit.HOURS, 1, TimeUnit.HOURS)
        .setConstraints(constraints)
        .setInitialDelay(2, TimeUnit.HOURS)
        .setBackoffCriteria(BackoffPolicy.LINEAR, 1, TimeUnit.HOURS)
        .build()

0
投票

另一种方法是使用一次请求来完成这项工作。您可以安排一次请求,当执行该请求并调用其 doWork() 时,您可以在接下来的 15 分钟内安排另一个请求,然后像递归一样依此类推。这很简单。


0
投票

很多天后我找到了定期工作管理器的解决方案 使用时间间隔至少1小时。文档中提到至少 15 分钟,但它不起作用,为什么不在文档中提及,当我设置 1 小时后它就可以工作了。

  fun scheduleNotificationRepeated() {
    val constraints: Constraints = Constraints.Builder().apply {
        setRequiredNetworkType(NetworkType.CONNECTED)
        setRequiresBatteryNotLow(true)
    }.build()
    val request: PeriodicWorkRequest = PeriodicWorkRequest.Builder(
        NotifyWork::class.java, 1, TimeUnit.HOURS, 1, TimeUnit.HOURS)
        .setConstraints(constraints)
        .setInitialDelay(2, TimeUnit.HOURS)
        .setBackoffCriteria(BackoffPolicy.LINEAR, 1, TimeUnit.HOURS)
        .build()
    val instanceWorkManager = WorkManager.getInstance(this)
        instanceWorkManager.enqueueUniquePeriodicWork(
        "TAG_WORK_NAME",
        ExistingPeriodicWorkPolicy.KEEP,
        request
    )
}
© www.soinside.com 2019 - 2024. All rights reserved.