0

首先让我纠正一下:

Work Manager :可以定义的最小重复间隔为 15 分钟(与 JobScheduler API 相同)。 如果这不正确,请告诉我。

我创建了以下类来执行定期工作请求:

object WorkManagerUtils {

fun syncWorkManager() {
    val myConstraints = Constraints.Builder()
            .setRequiredNetworkType(NetworkType.CONNECTED)
            .build()

    val syncRequest = PeriodicWorkRequest
            .Builder(MyWorker::class.java, 20000, TimeUnit.MILLISECONDS)
            .setConstraints(myConstraints)
            .build()

    WorkManager
            .getInstance()
            .enqueueUniquePeriodicWork(
                    Constants.WORKER,
                    ExistingPeriodicWorkPolicy.KEEP,
                    syncRequest)
   }
}

下面是我的工人班。请检查 :

class MyWorker(val context: Context, param: WorkerParameters) : Worker(context, param) {
override fun doWork(): Result {
    if (isNetworkAvailable(context)) {
        callSyncApi()
    } else {
        WorkManagerUtils.syncWorkManager()
    }
    return Result.success()
}

private fun callSyncApi() {
        ToastUtils.shortToast(0,"This is working")
   }
 }

在我的活动中调用它如下:

WorkManagerUtils.syncWorkManager()

您可以注意到,目前我只是将 toast 显示为我的工作。我想检查这是否有效?

但是吐司没有显示。

4

1 回答 1

1

任何低于 15 分钟的间隔都将替换为 15 分钟。

假设您的ToastUtils.showToast(...)工作,我相信工作经理选择了 15 分钟的间隔,并且“保持”现有工作政策阻止了重新安排和测试。

我建议在测试时将现有的工作策略更改为“REPLACE”。

来自工作管理器 1.0.0 来源:

public final class PeriodicWorkRequest extends WorkRequest {
    ...
    public static final long MIN_PERIODIC_INTERVAL_MILLIS = 15 * 60 * 1000L; // 15 minutes
    ...
}

public class WorkSpec {
    ...
    public void setPeriodic(long intervalDuration) {
        if (intervalDuration < MIN_PERIODIC_INTERVAL_MILLIS) {
            ...
            IntervalDuration = MIN_PERIODIC_INTERVAL_MILLIS;
        }
    }
    ...
}

存在setPeriodic应用相同间隔强制的函数重载。

于 2021-03-15T08:37:33.553 回答