android - 使用 WorkManager 的定期日常工作请求
问题描述
如何正确使用WorkManager
Android 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()
方法中放置了一个断点(所以它肯定在进行中)并从另一个线程检查工作状态。
解决方案
您现在可以使用enqueueUniquePeriodicWork
方法。它是在 WorkManager 的 1.0.0-alpha03 版本中添加的。
推荐阅读
- python - 在这种情况下使用文本文件存储数据的最佳方式是什么?
- java - 从 Artifactory 远程存储库下载大型工件
- python - 使用curve_fit的Python非线性回归误差
- python - 将 Pandas 多索引作为元组列表返回?
- scala - Slick - 如何在没有主键的情况下插入表
- google-apps-script - 粘贴到特定列 - Google 表格
- nativescript - 如何使用 RadListView 制作手风琴列表?(本机脚本)
- laravel - Laravel - 避免模型中的代码重复
- android - Android Espresso 分片随机失败并出现 INSTALL_FAILED_INVALID_APK
- python - Python:同时循环遍历字典中的所有列表以过滤掉元素