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);
您可以使用 getWorkInfoByIdLiveData
或 getWorkInfoByTagLiveData
。 WorkManager 向每个 enqueue() 添加一个隐式标记,这是 class 的简单名称。所以你可以这样做:
workManager.getWorkInfosByTagLiveData(TripWorker.class.getName())
您不能修改现有的 WorkRequest。
您可以使用 WorkManager 的 unique work 并将修改后的 WorkRequest 加入队列以替换现有的:
- 使用
enqueueUniqueWork
而不是使用 enqueue
- 当您需要修改 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(或其他存储)。
我使用 WorkManager 而不是 AlarmManager,我想在运行时更新请求,因此我需要检索该请求。我该怎么做?
OneTimeWorkRequest request = new OneTimeWorkRequest.Builder(TripWorker.class)
.setInputData(dataBuilder.build())
.setInitialDelay(milliseconds, TimeUnit.MILLISECONDS)
.addTag("Tag")
.build();
workManager.enqueue(request);
您可以使用 getWorkInfoByIdLiveData
或 getWorkInfoByTagLiveData
。 WorkManager 向每个 enqueue() 添加一个隐式标记,这是 class 的简单名称。所以你可以这样做:
workManager.getWorkInfosByTagLiveData(TripWorker.class.getName())
您不能修改现有的 WorkRequest。
您可以使用 WorkManager 的 unique work 并将修改后的 WorkRequest 加入队列以替换现有的:
- 使用
enqueueUniqueWork
而不是使用enqueue
- 当您需要修改 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(或其他存储)。