使用 APPTND_OR_REPLACE 使用不同的输入数据对独特的工作进行排队,但在工作程序中结果与通过第一个请求的结果相同
使用的组件:androidx.work/WorkManager
(androidx.work:工作运行时)
使用版本:2.7.1
设备/Android 版本转载于:Android 10
我已使用不同的 InputData 和 ExistingWorkPolicy.APPEND_OR_REPLACE
将许多 OneTimeUniqueWorkRequest 排入队列。
但是,当每个工作运行时,在 doWork() 中,我得到了类似的输入数据,它来自我排队的第一个工作请求。
但如果我将 ExistingWorkPolicy.APPEND_OR_REPLACE
更改为 ExistingWorkPolicy.REPLACE
,效果会很好。
但是我需要 ExistingWorkPolicy.APPEND_OR_REPLACE 使其成为线性工作请求队列。
这应该发生吗?我怎样才能避免这种情况?
编辑:
对于我糟糕的英语,这里我提供一个例子来澄清问题。
- 我将具有唯一工作名称和输入数据 A 的请求 1 排入队列
- 请求 1 按预期成功完成
- 我将具有相同唯一工作名称的请求 2 与输入数据 B 排入队列
- 请求 2 已成功启动但得到了输入数据 A,但没有得到 B。
这两个工作请求都使用如下代码排队:
OneTimeWorkRequest work = new OneTimeWorkRequest.Builder(SendingWorker.class)
.setInputData(genSendingInputData("A"))
.setExpedited(OutOfQuotaPolicy.RUN_AS_NON_EXPEDITED_WORK_REQUEST)
.build();
WorkManager.getInstance(mContext).enqueueUniqueWork("SEND", ExistingWorkPolicy.APPEND_OR_REPLACE, work);```
Component used:androidx.work/WorkManager
(androidx.work:work-runtime)
Version used:2.7.1
Devices/Android versions reproduced on: Android 10
I have enqueued many OneTimeUniqueWorkRequest with different InputData, with ExistingWorkPolicy.APPEND_OR_REPLACE
.
But when every work run, in doWork()
, I got similiar inputdata, which is from the first work request i enqueued.
But if I change ExistingWorkPolicy.APPEND_OR_REPLACE
to ExistingWorkPolicy.REPLACE
, it works well.
However I need ExistingWorkPolicy.APPEND_OR_REPLACE
to make it a linear workrequest queue.
Should this be happend? How can I avoid this?
Edited:
For my poor english, here I provide a example to clearifier the question.
- I enqueued request 1 with a unique work name with input data A
- Request 1 finished successfully as expected
- I enqueued request 2 with same unique work name with input data B
- Request 2 started successfully but got input data A but not B.
Both of these work request are enqueued with code like following code:
OneTimeWorkRequest work = new OneTimeWorkRequest.Builder(SendingWorker.class)
.setInputData(genSendingInputData("A"))
.setExpedited(OutOfQuotaPolicy.RUN_AS_NON_EXPEDITED_WORK_REQUEST)
.build();
WorkManager.getInstance(mContext).enqueueUniqueWork("SEND", ExistingWorkPolicy.APPEND_OR_REPLACE, work);```
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论