【问题标题】:Android WorkManager and WorkerAndroid WorkManager 和 Worker
【发布时间】: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


【解决方案1】:
val periodicSchedulerWorker =  OneTimeWorkRequestBuilder<PeriodicFamilyWidgetsSchedulerWorker()
           .setInitialDelay(REFRESH_MIN, TimeUnit.MINUTES)
           .build()

问题是每个 val 变量的引用都没有初始化。对于上面的periodicSchedulerWorker,我只是变成了一个函数,解决了我的问题。我最初关注的是 android 文档,不确定发生了什么变化:

fun periodicSchedulerWorker() =  OneTimeWorkRequestBuilder<PeriodicFamilyWidgetsSchedulerWorker()
           .setInitialDelay(REFRESH_MIN, TimeUnit.MINUTES)
           .build()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多