使用 APPTND_OR_REPLACE 使用不同的输入数据对独特的工作进行排队,但在工作程序中结果与通过第一个请求的结果相同

发布于 01-21 02:45 字数 1099 浏览 2 评论 0原文

使用的组件: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 使其成为线性工作请求队列。

这应该发生吗?我怎样才能避免这种情况?

编辑:

对于我糟糕的英语,这里我提供一个例子来澄清问题。

  1. 我将具有唯一工作名称和输入数据 A 的请求 1 排入队列
  2. 请求 1 按预期成功完成
  3. 我将具有相同唯一工作名称的请求 2 与输入数据 B 排入队列
  4. 请求 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.

  1. I enqueued request 1 with a unique work name with input data A
  2. Request 1 finished successfully as expected
  3. I enqueued request 2 with same unique work name with input data B
  4. 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文