Gak*_*ket 10 android android-architecture-components android-jetpack android-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);
}
Run Code Online (Sandbox Code Playgroud)
但value总是空,即使我把一个断点里面Worker的doWork()方法(所以它肯定是正在进行中),并从另一个线程检查工作状态.
Khe*_*raj 13
您正在寻找enqueueUniquePeriodicWork
此方法允许您将唯一命名的 PeriodicWorkRequest加入队列,其中一次只能激活一个具有特定名称的 PeriodicWorkRequest。例如,您可能只想激活一个同步操作。如果有待处理,您可以选择让它运行或替换为您的新工作。
示例代码
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);
}
Run Code Online (Sandbox Code Playgroud)
你得到两种类型的ExistingPeriodicWorkPolicy
保持
如果存在具有相同唯一名称的现有待处理工作,则不执行任何操作。
代替
如果存在具有相同唯一名称的现有待处理工作,则取消并删除它。
| 归档时间: |
|
| 查看次数: |
8472 次 |
| 最近记录: |