【发布时间】:2019-05-14 11:43:42
【问题描述】:
我想每天将 db 与服务器数据同步一次,将工作排入队列的最佳位置是什么,所以它每天只运行一次? WorkManager 似乎并不关心下一个入队调用是否在 repeatInterval 内。如果我将排队工作放在 Application 类中,并且如果该工作完成,如果我关闭并打开应用程序,WorkManager 将再次运行它。
这是否意味着我在调用WorkManager.enqueue()之前总是要检查工作是否入队?
val workInfo = workManager.getWorkInfosForUniqueWork("UNIQUE_WORK_NAME").get()?.getOrNull(0)
if (workInfo?.state == WorkInfo.State.ENQUEUED) {
// do nothing
return
}
workManager.enqueueUniquePeriodicWork(
"UNIQUE_WORK_NAME",
ExistingPeriodicWorkPolicy.KEEP,
PeriodicWorkRequestBuilder<SyncDbWorker>(
1,
TimeUnit.DAYS
)
.setConstraints(constraints)
.build())
更新:
我忘记提及的一件事是,在我的 Worker 内部,我总是返回 Result.success()。因此,如果工作因某种原因失败,WorkManager 将在下一次迭代时重试。
【问题讨论】:
-
取决于用例,但如果你有一个单一的活动应用程序,请在那里使用它,否则。仅在您需要的活动中使用它。
-
@StavroXhardha 问题是它不属于任何活动,这项工作只需每天完成一次(即开即弃)
标签: android android-jetpack android-workmanager