假设我已经通过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

最佳答案

您应该为两个工作人员指定相同的uniqueWorkName。请参阅beginUniqueWork documentation


  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)

关于android - 我们可以使用WorkManager在其他UniqueWork队列中添加另一个UniqueWork吗,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54705252/

10-10 08:49