WorkManager执行两次doWork()。即使在使用.enqueueUniquePeriodicWork()时,我也会得到具有相同ID的重复项,这些ID可以并行运行。
我的自定义约束条件仅允许在屏幕关闭时进行工作,但在满足条件时进行两次。
我试图取消并修剪所有先前存在的工作,但是doWork()仍然被调用两次。
按钮被单击->
Log.i("[Worker]","Start");
// Change every 15 minutes.
PeriodicWorkRequest.Builder builder = new PeriodicWorkRequest.Builder(Worker.class, 15, TimeUnit.MINUTES);
builder.setConstraints(Constraints.NONE);
builder.setBackoffCriteria(BackoffPolicy.LINEAR,30,TimeUnit.SECONDS);
builder.addTag("loader");
PeriodicWorkRequest request = builder.build();
// cancel all work
WorkManager.getInstance().cancelAllWork();
// clear all finished or cancelled tasks from the WorkManager
WorkManager.getInstance().pruneWork();
// Start PeriodicWork
WorkManager.getInstance().enqueueUniquePeriodicWork(request.getId().toString(),REPLACE,request);
// Worker.java
public Worker.Result doWork() {
// Print workId
// Is screen on
PowerManager pm = (PowerManager) getApplicationContext().getSystemService(Context.POWER_SERVICE);
boolean isScreenOn = pm.isInteractive();
int r = getRunAttemptCount()+1;
if (!isScreenOn) {
Log.i("[Worker]", "workId: " + getId());
// CODE
} else if (isScreenOn) {
Log.i("[Worker]","Fail: Retry "+r);
return Result.retry();
}
return Result.success();
}
Log.i:
时间:16:23:00.634 [工作者]:开始
时间:16:23:00.963 [工作者]:失败:重试1
时间:16:23:31.052 [Worker]:workId:90369ace-2e0b-4398-8cf1-6e5c3cd306c5
时间:16:23:31.168 [Worker]:workId:90369ace-2e0b-4398-8cf1-6e5c3cd306c5
依赖性{
def work_version =“ 2.0.1”
实现“ androidx.work:工作运行时:$ work_version”
}
答案 0 :(得分:0)
这些不是并行运行的。您的工作会在应用启动时立即运行,因为正在重试。同时,您尝试取消它并立即运行一个新的。您可以看到时间戳不同。