【问题标题】:Dynamically set sequence of work requests动态设置工作请求顺序
【发布时间】:2023-03-05 20:52:01
【问题描述】:

我有一些很长的任务,我想把它分成几个小子任务:

  1. 第一个worker下载任务列表并根据下载结果对n个任务进行排队;
  2. 下一个工作人员执行它的小任务:它会检查,如果为真,则不需要完成子任务的更多操作,将其排入下一个工作请求;
  3. 如果检查失败:第三个工作人员从远程服务器加载数据,如果成功,我们将新的 WorkRequest 加入到磁盘上存储数据,esle 任务失败(或重试);
  4. 如果加载数据,最后一个worker将数据存储在磁盘上,如果成功,我们完成子任务,否则失败。

我们总共有 4 名工人在做不同的事情。第 2 和第 4 个工作请求的结果必须合并为一个最终结果。

我的问题是如何将它们连接起来,合并结果,以及如何将彼此的工作排入队列?

【问题讨论】:

  • 你有没有想过如何做到这一点?

标签: android android-workmanager


【解决方案1】:

你可以试试Android workmanager 库。该 api 提供类似于您需要的东西。它被称为链式任务。 一个例子:

WorkManager.getInstance()
.beginWith(workA)
    // Note: WorkManager.beginWith() returns a
    // WorkContinuation object; the following calls are
    // to WorkContinuation methods
.then(workB)    // FYI, then() returns a new WorkContinuation instance
.then(workC)
.enqueue();

【讨论】:

  • 我的问题从一开始就是关于 WorkManager 的
【解决方案2】:

要连接Workers,在WorkManager中,你可以使用WorkContinuation。 通过这种方式,您可以将多个任务排入队列,作为构建复杂管道的一系列步骤。这在WorkManager's documentation 中有解释。

那么是否可以使用androidx.work.Data 作为轻量级容器将数据传递给工作人员,但这不应被视为您的数据存储。作为一个例子,你可以看看这是如何在WorkManager's codelab 中实现的。

如果您需要在 Worker 之间传递更多数据,最好的选择可能是将它们卸载到数据层。

【讨论】:

    猜你喜欢
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多