Android WorkManager 检索所有请求

Android WorkManager retrieve all requests

我使用 WorkManager 而不是 AlarmManager,我想在运行时更新请求,因此我需要检索该请求。我该怎么做?

OneTimeWorkRequest request = new OneTimeWorkRequest.Builder(TripWorker.class)
                           .setInputData(dataBuilder.build())
                           .setInitialDelay(milliseconds, TimeUnit.MILLISECONDS)
                           .addTag("Tag")
                           .build();

workManager.enqueue(request);

您可以使用 getWorkInfoByIdLiveDatagetWorkInfoByTagLiveData。 WorkManager 向每个 enqueue() 添加一个隐式标记,这是 class 的简单名称。所以你可以这样做:

workManager.getWorkInfosByTagLiveData(TripWorker.class.getName())

您不能修改现有的 WorkRequest。

您可以使用 WorkManager 的 unique work 并将修改后的 WorkRequest 加入队列以替换现有的:

  1. 使用 enqueueUniqueWork 而不是使用 enqueue
  2. 当您需要修改 WorkRequest 时,创建一个新的并使用 UniqueWorkRequest 将其加入队列,使用相同的唯一名称和 REPLACE 策略。

请记住,您的 Worker 可能 运行 在您更换它时。您需要小心处理 Worker 中的停工(停工是合作的,因此您需要添加一些代码,如 guide) using the isStopped method and implementing the onStopped() 回调中所述。

不幸的是,从 v2.7.1 开始似乎无法获得提交的 WorkRequest


对于想要查看传递给工作请求的输入数据的人:

可以做的是自行保存工作请求的输入数据,例如在房间 table(如果您使用房间)或其他任何地方,并使用从 WorkManager.enqueue 返回的 ID 作为密钥。

然后,通过获取 workInfos 列表,您可以通过 ID 查询您的数据库 table(或其他存储)。