动态设置工作请求顺序

时间:2018-09-25 11:59:03

标签: android android-workmanager

我有一些漫长的任务,我想将其粉碎成几个小子任务:

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

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

我的问题是如何连接它们,合并结果以及如何使工作相互排队?

2 个答案:

答案 0 :(得分:0)

您可以尝试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();

答案 1 :(得分:0)

要连接Worker,可以在WorkManager中使用WorkContinuation。 这样,您可以将多个任务作为构建复杂管道的步骤序列入队。 WorkManager's documentation中对此进行了解释。

然后可以使用androidx.work.Data作为轻量级容器来将数据传递给工作程序,但是这不应被视为您的数据存储。例如,您可以查看如何在WorkManager's codelab中实现此功能。

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