我正在尝试运行两个单独的工作程序,当我启动一个工作程序时,我无法启动另一个工作程序。我觉得我可能缺少一些东西来关闭工作人员,让我无法另谋高就。
片段
Constraints myConstrainst = new Constraints.Builder()
.setRequiredNetworkType(NetworkType.UNMETERED)
.build();
OneTimeWorkRequest workerOne = new OneTimeWorkRequest.Builder(WorkerOne.class)
.setConstraints(myConstraints)
.addTag("WorkerOne")
.build();
OneTImeWorkRequest workerTwo = new OneTimeWorkRequest.Builder(WorkerTwo.class)
.setConstraints(myConstrains)
.addTag("WorkerTwo")
.build();
btnOne.setOnClickListener(view -> {
WorkMananger.getInstance(getActivity()).enqueue(workerOne);
});
btnTwo.setOnClickListener(view -> {
WorkManager.getInstance(getActivity()).enqueue(workerTwo);
});
WorkerOne
public class WorkerOne extends Worker {
public WorkerOne(@NonNull Context context, @NonNull WorkerParameters workerParams) {
super(context, workerParams);
}
@Override
public Result doWork() {
for(int i = 0; i < 5; i++) {
Log.d("WorkerOne", "doWork " + i);
SystemClock.sleep(1000);
}
return Result.success();
}
}
WorkerTwo
public class WorkerTwo extends Worker {
public WorkerTwo(@NonNull Context context, @NonNull WorkerParameters workerParams) {
super(context, workerParams);
}
@Override
public Result doWork() {
for(int i = 0; i < 5; i++) {
Log.d("WorkerTwo", "doWork " + i);
SystemClock.sleep(1000);
}
return Result.success();
}
}
可能是您的工作人员Constraint
与设备的当前状况不匹配的情况。请检查您的Constraint
。
您的代码在我的测试中工作正常,两个工人都在工作,
从注释中获得的信息,过滤logcat的方法不那么正确,因此您只从一个Worker获取日志,而过滤掉另一个Worker的日志。
这可以通过调试两个doWork()中带有断点的代码来确认。
编辑
OneTimeWorkRequest
应该只工作一次,如果您想重复工作,您可以在按钮的回调中实例化OneTimeWorkRequest
对象,因此它将是一个具有新工作请求的新对象
btnOne.setOnClickListener(view -> {
OneTimeWorkRequest workerOne = new OneTimeWorkRequest.Builder(WorkerOne.class)
.setConstraints(myConstraints)
.addTag("WorkerOne")
.build();
WorkManager.getInstance(getActivity()).enqueue(workerOne);
});