首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用WorkManager的定期日常工作请求

使用WorkManager的定期日常工作请求
EN

Stack Overflow用户
提问于 2018-05-16 02:32:37
回答 3查看 14.7K关注 0票数 16

如何正确地使用Android Jetpack的新WorkManager来安排每天一次的周期性工作,这些工作应该每天都做一些动作,而且恰好只有一次?

这个想法是使用WorkManager检查具有给定标签的工作是否已经存在,否则开始一个新的周期性工作。

我已经尝试过使用next方法来实现:

代码语言:javascript
复制
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始终为空,即使我在WorkerdoWork()方法中设置了断点(因此它肯定正在进行中),并从另一个线程检查工作状态。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-06-26 23:53:52

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

票数 17
EN

Stack Overflow用户

发布于 2018-11-23 03:54:17

您正在寻找enqueueUniquePeriodicWork

此方法允许您对具有唯一名称的 PeriodicWorkRequest进行入队,其中一次只能有一个特定名称的处于活动状态。例如,您可能只希望一个同步操作处于活动状态。如果有一个挂起,您可以选择让它运行或用您的新工作替换它。

示例代码

代码语言:javascript
复制
public static final String TAG_MY_WORK = "mywork";

public static void scheduleWork(String tag) {
    PeriodicWorkRequest.Builder photoCheckBuilder =
            new PeriodicWorkRequest.Builder(WorkManagerService.class, 1, TimeUnit.DAYS);
    PeriodicWorkRequest request = photoCheckBuilder.build();
    WorkManager.getInstance().enqueueUniquePeriodicWork(tag, ExistingPeriodicWorkPolicy.KEEP , request);
}

你会得到两种类型的ExistingPeriodicWorkPolicy

KEEP

如果存在具有相同唯一名称的挂起工作,则不执行任何操作。

替换

如果存在具有相同唯一名称的待处理工作,请取消并删除它。

票数 14
EN

Stack Overflow用户

发布于 2018-05-16 03:16:16

最终,我明白了,问题在于LiveData的使用方式。因为没有观察者,所以里面没有价值。

只使用PeriodicWork的问题是,它不能确保您要做的工作的唯一性。换句话说,有可能有许多作品同时处于活动状态,并触发比您需要的更多的次数。

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

https://stackoverflow.com/questions/50357066

复制
相关文章

相似问题

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