我正在创建一个 Android 通知应用程序,在设置闹钟后每 15 分钟发出一次通知。
它第一次调用,并显示通知,但 Workmanager 不会每 15 分钟调用一次。
val myWorkRequest = PeriodicWorkRequestBuilder<ReminderWorker>(15, TimeUnit.MINUTES).build()
WorkManager.getInstance(applicationContext)
.enqueueUniquePeriodicWork("work", ExistingPeriodicWorkPolicy.REPLACE, myWorkRequest)
您需要将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()
另一种方法是使用一次请求来完成这项工作。您可以安排一次请求,当执行该请求并调用其 doWork() 时,您可以在接下来的 15 分钟内安排另一个请求,然后像递归一样依此类推。这很简单。
很多天后我找到了定期工作管理器的解决方案 使用时间间隔至少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
)
}