首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何每5秒运行WorkManager的工作重试

如何每5秒运行WorkManager的工作重试
EN

Stack Overflow用户
提问于 2020-02-19 13:13:56
回答 3查看 2.4K关注 0票数 2

如何每5秒重试一次工作?如果成功了就取消它?

对于下面的解决方案,它每10秒运行一次+时间的线性增长。

代码语言:javascript
运行
复制
// todo: schedule, and invoke worker every 5 seconds
// todo: if the work is done and there is no more work in queue - cancel worker.

fun scheduleBatchUpload(uniqueWorkName: String) {
    val logBuilder = PeriodicWorkRequest.Builder(StreamLogWorker::class.java, 5, TimeUnit.SECONDS)

    logBuilder.setBackoffCriteria(BackoffPolicy.LINEAR, 5000, TimeUnit.MILLISECONDS) // Custom retry not working

    WorkManager.getInstance().enqueueUniquePeriodicWork(uniqueWorkName, ExistingPeriodicWorkPolicy.REPLACE, logBuilder.build())
}


class StreamLogWorker(context: Context, workerParams: WorkerParameters) : Worker(context, workerParams) {

    override fun doWork(): Result {
        Log.e("!!!!!!!!!!", "doWork")
        return Result.retry()
    }
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-02-19 15:02:09

这在PeriodicWorkRequest中是不可能的。如果您查看正在使用的文档构造函数的PeriodicWorkRequest.Builder,您将看到它显示了关于第二个参数的内容

重复间隔必须大于或等于PeriodicWorkRequest.MIN_PERIODIC_INTERVAL_MILLIS.

PeriodicWorkRequest.MIN_PERIODIC_INTERVAL_MILLIS的值是900000,这意味着它等于15分钟。

票数 2
EN

Stack Overflow用户

发布于 2020-02-19 14:22:04

你可以尝试手动安排你的任务,也许它能帮助你达到目标。

代码语言:javascript
运行
复制
private fun WorkManager.launchFrequentTask() {
    val request = OneTimeWorkRequestBuilder<StreamLogWorker>()
            .setInitialDelay(5, TimeUnit.SECONDS)
            .build()
    enqueueUniqueWork(UNIQUE_WORK_NAME, ExistingWorkPolicy.APPEND, request)
}

class StreamLogWorker(private val context: Context, workerParams: WorkerParameters) : Worker(context, workerParams) {

    override fun doWork(): Result {
        try {
            // TODO doWork
        } catch (th: Throwable) {
            // log error
        }
        WorkManager.getInstance(context).launchFrequentTask()
        return Result.success()
    }
}

不确定这是否真的如你所愿(每5秒一次),有必要检查一下。

票数 1
EN

Stack Overflow用户

发布于 2021-07-12 18:10:16

重复间隔必须大于或等于PeriodicWorkRequest.MIN_PERIODIC_INTERVAL_MILLIS(see文档)。周期工作至少间隔15分钟。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60301212

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档