如何使用 androidx.work.WorkManager 观察 Chained work 中所有阶段的 LiveData<WorkInfo>
How to observe LiveData<WorkInfo> of all stages in Chained work with 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);
}
我的观察者收到一个 WorkInfo
空列表的更新。
如何观察链式 worker 序列的每个阶段?
我找到了解决方法如下:-
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();
final WorkContinuation workContinuation = mWorkManager.beginUniqueWork(CHAINED_UNIQUE_NAME, ExistingWorkPolicy.KEEP, stageOne).then(stageTwo).then(stageThree).then(stageFour);
final LiveData<List<WorkInfo>> workInfos = workContinuation.getWorkInfosLiveData();
workContinuation.enqueue();
return workInfos;
}
不过,我确信必须有更优雅的方法来实现我想要的结果。
getWorkInfosByTagLiveData
不是正确的方法。您正在排队一项独特的工作,这意味着您需要调用 getWorkInfosForUniqueWorkLiveData
。您正在调用的其他方法也适用于这种情况。
我正在调查 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);
}
我的观察者收到一个 WorkInfo
空列表的更新。
如何观察链式 worker 序列的每个阶段?
我找到了解决方法如下:-
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();
final WorkContinuation workContinuation = mWorkManager.beginUniqueWork(CHAINED_UNIQUE_NAME, ExistingWorkPolicy.KEEP, stageOne).then(stageTwo).then(stageThree).then(stageFour);
final LiveData<List<WorkInfo>> workInfos = workContinuation.getWorkInfosLiveData();
workContinuation.enqueue();
return workInfos;
}
不过,我确信必须有更优雅的方法来实现我想要的结果。
getWorkInfosByTagLiveData
不是正确的方法。您正在排队一项独特的工作,这意味着您需要调用 getWorkInfosForUniqueWorkLiveData
。您正在调用的其他方法也适用于这种情况。