5

我如何检查是否在排队时Worker遇到?Constraints

例如,如果我需要从 Internet 下载数据并确定Worker只有在有 Internet 连接时才运行。我如何在那个时候检查是否Worker满足Constraints提醒用户?

或者,如果我要执行一项可能会消耗大量电池电量的任务,并且我想显示Dialog一句话“开始为智能手机的电池充电以启动”

有没有办法从外部方法做到这一点,WorkManager或者我必须从外部方法做到这一点?

4

4 回答 4

2

我认为库应该在不满足约束时提供某种回调(目前没有类似的东西)。

我在这里创建了一个谷歌问题https ://issuetracker.google.com/issues/144367861

随意给它加星标,这样它就可以获得更多的知名度:)

于 2019-11-13T11:15:52.750 回答
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 个状态,ENQUEUED 可能对您有用。

于 2020-11-06T14:18:32.260 回答
0

你不必。您可以只在 上设置约束,OneTimeWorkRequest并在满足约束时WorkManager安排Worker

于 2018-06-07T22:29:45.297 回答
0

这就像删除表明运行作业需要网络连接的约束一样简单。

您可以简单地安排一个定期请求(您可以按照我在此SO上的回答来实施定期请求),当它被触发时,检查是否启用了互联网连接。如果是,则执行任务,否则只需发布通知或任何其他合适的方式来通知用户。

于 2018-06-23T07:03:34.400 回答