首页 > 解决方案 > 使用 WorkManager 的定期日常工作请求

问题描述

如何正确使用WorkManagerAndroid Jetpack 中的新功能来安排每天一次的定期工作,该工作应该每天并且恰好一次执行一些操作?

想法是检查具有给定标签的工作是否已经存在WorkManager,否则开始新的定期工作。

我尝试使用下一种方法来做到这一点:

public static final String CALL_INFO_WORKER = "Call worker";

...

WorkManager workManager = WorkManager.getInstance();
List<WorkStatus> value = workManager.getStatusesByTag(CALL_INFO_WORKER).getValue();
if (value == null) {
    WorkRequest callDataRequest = new PeriodicWorkRequest.Builder(CallInfoWorker.class,
                24, TimeUnit.HOURS, 3, TimeUnit.HOURS)
                .addTag(CALL_INFO_WORKER)
                .build();
    workManager.enqueue(callDataRequest);
}

value始终为空,即使我在Worker'doWork()方法中放置了一个断点(所以它肯定在进行中)并从另一个线程检查工作状态。

标签: androidandroid-architecture-componentsandroid-jetpackandroid-workmanager

解决方案


您现在可以使用enqueueUniquePeriodicWork方法。它是在 WorkManager 的 1.0.0-alpha03 版本中添加的。


推荐阅读