如何在排队时检查Worker
是否符合Constraints
?
例如,如果我需要从互联网上下载数据并确定Worker
仅在有互联网连接的情况下运行。如果Worker
符合Constraints
以提醒用户,我该如何查看?
或者,如果我要执行一项耗费大量电池电量的任务,我想显示Dialog
说“开始为智能手机的电池充电开始”
有没有办法从WorkManager
执行此操作,还是必须从外部方法执行此操作?
答案 0 :(得分:1)
使用 getWorkInfoByIdLiveData()。observe()
WorkManager.getInstance().enqueue(WorkRequest);
WorkManager.getInstance().getWorkInfoByIdLiveData(WorkRequest.getId())
.observe(this, new Observer<WorkInfo>() {
@Override
public void onChanged(WorkInfo workInfo) {
switch (workInfo.getState()) {
case ENQUEUED:
// TODO: Show alert here
break;
case RUNNING:
// TODO: Remove alert, if running
break;
case SUCCEEDED:
// TODO: After work completed
break;
case FAILED:
break;
case BLOCKED:
break;
case CANCELLED:
break;
}
}
});
WorkInfo.State具有6种状态,“入队”对您有用。
答案 1 :(得分:0)
你不必。您只需在OneTimeWorkRequest
上设置约束,WorkManager
将在满足约束时安排Worker
。
答案 2 :(得分:0)
这将非常简单,只需删除约束,该约束指出运行作业需要网络连接。
您可以简单地安排一个定期请求(您可以按照我在SO上的回答来实施定期请求),并在触发该请求时检查是否启用了Internet连接。如果是这样,则执行任务,否则只需发布Notification或任何其他合适的方式来通知用户。
答案 3 :(得分:0)
我认为,当不满足约束时(当前没有类似的限制),库应该提供某种回调。
我在此处创建了一个 google问题:https://issuetracker.google.com/issues/144367861
随时为它加注星标,以便获得更多的可见度:)