首页 > 解决方案 > 如何观察 LiveData使用 androidx.work.WorkManager 进行链式工作的所有阶段

问题描述

我正在调查androidx.work.WorkManager我当前的 Android 应用程序。

我在用

implementation 'android.arch.work:work-runtime:1.0.0-rc01'

我正在尝试安排链式工作并观察LiveData<WorkInfo>每个现场阶段的工作。

我看不出如何实现这一目标。

我当前的代码类似于:-

public LiveData<WorkInfo> syncAll() {
    final OneTimeWorkRequest stageOne = new OneTimeWorkRequest.Builder(Stage_0001.class).addTag(STAGE_1_IN_PROGRESS_TAG).build();
    final OneTimeWorkRequest stageTwo = new OneTimeWorkRequest.Builder(Stage_0002.class).addTag(STAGE_2_IN_PROGRESS_TAG).build();
    final OneTimeWorkRequest stageThree = new OneTimeWorkRequest.Builder(Stage_0003.class).addTag(STAGE_3_IN_PROGRESS_TAG).build();
    final OneTimeWorkRequest stageFour = new OneTimeWorkRequest.Builder(Stage_0004.class).addTag(STAGE_4_IN_PROGRESS_TAG).build();
    mWorkManager.beginUniqueWork(CHAINED_UNIQUE_NAME, ExistingWorkPolicy.KEEP, stageOne).then(stageTwo).then(stageThree).then(stageFour).enqueue();
    return mWorkManager.getWorkInfoByIdLiveData(stageOne.getId());
}

我的观察者只收到 stageOne 更新。

如果我改为

public LiveData<List<WorkInfo>>  syncAll() {
    final OneTimeWorkRequest stageOne = new OneTimeWorkRequest.Builder(Stage_0001.class).addTag(STAGE_1_IN_PROGRESS_TAG).build();
    final OneTimeWorkRequest stageTwo = new OneTimeWorkRequest.Builder(Stage_0002.class).addTag(STAGE_2_IN_PROGRESS_TAG).build();
    final OneTimeWorkRequest stageThree = new OneTimeWorkRequest.Builder(Stage_0003.class).addTag(STAGE_3_IN_PROGRESS_TAG).build();
    final OneTimeWorkRequest stageFour = new OneTimeWorkRequest.Builder(Stage_0004.class).addTag(STAGE_4_IN_PROGRESS_TAG).build();
    mWorkManager.beginUniqueWork(CHAINED_UNIQUE_NAME, ExistingWorkPolicy.KEEP, stageOne).then(stageTwo).then(stageThree).then(stageFour).enqueue();
    return mWorkManager.getWorkInfosByTagLiveData(CHAINED_UNIQUE_NAME);
}

我的观察者收到一个空的WorkInfos 列表的更新。

我如何观察链式工人序列的每个阶段?

标签: androidandroid-workmanager

解决方案


getWorkInfosByTagLiveData不是正确的方法。您正在排队一项独特的工作,这意味着您需要调用getWorkInfosForUniqueWorkLiveData. 在这种情况下,您调用的另一种方法也适用。


推荐阅读