【发布时间】:2021-06-09 04:50:59
【问题描述】:
我在下面有以下代码。我需要能够每 15 分钟运行一次 WorkerUtil.periodicSchedulerWorker。我注意到的是它只运行一次,之后就不再重复。当它第一次运行时,所有链式 Worker 都不会运行。知道为什么它可能不是每 15 分钟运行一次吗?或者我可以做些什么来改进当前的代码。从文档看来,15 分钟后,它可以决定运行更长时间,这在我的情况下很好。我想确保它保证在那个时候运行。我已经仔细检查了所有的约束和 BackofffCriteria,它们看起来都很好。
我知道有 PeriodicWorkRequestBuilder,但我们不能用它链接重复工作。
fun WorkManager.addFamilyUpdate(): WorkContinuation =
beginWith(WorkerUtil.refreshSomething)
.then(WorkerUtil.retrieveSomething)
.then(WorkerUtil.getSomethingElse)
.then(WorkerUtil.profileImageDoaloader)
.then(WorkerUtil.refreshWidgetUI)
val periodicSchedulerWorker = OneTimeWorkRequestBuilder<PeriodicFamilyWidgetsSchedulerWorker()
.setInitialDelay(REFRESH_MIN, TimeUnit.MINUTES)
.build()
fun WorkContinuation.addFollowUpUpdate(): WorkContinuation =
then(WorkerUtil.periodicSchedulerWorker)
class PeriodicSchedulerWorker(val context: Context, params: WorkerParameters) :
CoroutineWorker(context, params) {
override suspend fun doWork(): Result {
WorkManager.getInstance(context)
.addFamilyUpdate()
.addFollowUpUpdate()
.enqueue()
return Result.success()
}
}
【问题讨论】:
-
为什么 Android Kotlin 代码上有 Swift 标签?
-
addFamilyUpdate中是否有任何工作人员抛出异常或失败?我尝试了与您类似的设置,但仅在其中一项任务失败时重复失败 -
我的设置中没有一个失败。他们都第一次成功运行。 @团洲
-
你能用开始第一次运行的代码更新吗?
标签: java android kotlin android-jetpack