首页 > 解决方案 > 我们可以使用 WorkManager 在其他 UniqueWork 的队列中添加另一个 UniqueWork

问题描述

假设我已经使用WorkManager开始了这个 UniqueWork :-

var workContinuation: WorkContinuation = WorkManager.getInstance()
                .beginUniqueWork(AppConstants.FILE_CREATOR_TAG,
                        ExistingWorkPolicy.APPEND,
                        firstOneTimeWorkRequest)

现在,我们的应用程序用户可能希望为其他任务启动另一个 UniqueWork 工作,但该任务应添加到上述工作任务的队列中。

var workContinuation: WorkContinuation = WorkManager.getInstance()
                    .beginUniqueWork(AppConstants.FILE_DISTRIBUTE_TAG,
                            ExistingWorkPolicy.APPEND,
                            fileDistrubuteTimeWorkRequest)

现在我如何告诉 WorkManager 这个 UniqueWork AppConstants.FILE_DISTRIBUTE_TAG 应该在这个 AppConstants.FILE_CREATOR_TAG 的队列中。

我不想使用 Observable 解决方案,在该解决方案中我可以跟踪该AppConstants.FILE_CREATOR_TAG工作人员的完成并开始AppConstants.FILE_DISTRIBUTE_TAG

标签: androidandroid-workmanager

解决方案


uniqueWorkName您应该为两个工人指定相同的。参考beginUniqueWork 文档

唯一标识这uniqueWorkName组工作。

如果此方法确定应将新工作排入队列并运行,uniqueWorkName则将删除以前工作的所有记录。如果此方法确定不应运行新工作,则整个链将被视为无操作。

如果链中的任何工作失败或被取消,其所有相关工作都会继承该状态并且永远不会运行。如果您将APPEND其用作ExistingWorkPolicy ,这一点尤其重要。

因此,您的代码应该这样编写:

var workContinuation: WorkContinuation = WorkManager.getInstance()
                .beginUniqueWork(AppConstants.SOME_UNIQUE_NAME,
                        ExistingWorkPolicy.APPEND,
                        firstOneTimeWorkRequest)

// ...

var workContinuation: WorkContinuation = WorkManager.getInstance()
                .beginUniqueWork(AppConstants.SOME_UNIQUE_NAME,
                        ExistingWorkPolicy.APPEND,
                        fileDistrubuteTimeWorkRequest)

推荐阅读