Как наблюдать LiveData <WorkInfo>всех этапов в цепной работе с androidx.work.WorkManager - PullRequest
0 голосов
/ 19 февраля 2019

Я исследую 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 с.

Как мне наблюдать каждый этап последовательности работников?

Ответы [ 2 ]

0 голосов
/ 20 февраля 2019

getWorkInfosByTagLiveData не правильный метод.Вы ставите в очередь уникальную работу, то есть вам нужно позвонить getWorkInfosForUniqueWorkLiveData.Другой метод, который вы вызываете, также будет работать в этом случае.

0 голосов
/ 19 февраля 2019

Я нашел решение следующим образом: -

        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;
        }

Я уверен, что должен быть более элегантный метод для достижения желаемого результата.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...