我正在对当前的Android应用中的androidx.work.WorkManager
进行调查。
我正在使用
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
s空列表的更新。
我如何观察工人的一系列工作链的每个阶段?
答案 0 :(得分:1)
getWorkInfosByTagLiveData
是不正确的方法。您正在排队一份独特的作品,这意味着您需要致电getWorkInfosForUniqueWorkLiveData
。在这种情况下,您要调用的另一种方法也可以使用。
答案 1 :(得分:0)
我找到了以下解决方案:-
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;
}
我相信必须有一种更优雅的方法才能达到我想要的结果。