Как последовательно выполнять задачи менеджера работ (если у вас не все работы одновременно) - PullRequest
1 голос
/ 14 июня 2019

Я хочу загрузить некоторые объекты на сервер. Я использую менеджер работ и uniqueWork, чтобы не загружать дубликаты объектов. Работа ограничена, поэтому они работают только при наличии подключения к Интернету. Проблема в том, что я хочу, чтобы каждый из этих объектов загружался по одному, но вся работа происходит одновременно.

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

val workRequest = OneTimeWorkRequestBuilder<UploadWorker>()
            .setConstraints(networkConstraint)
            .build()
WorkManager.getInstance()
            .enqueueUniqueWork(uniqueName, ExistingWorkPolicy.KEEP, workRequest)

Я предполагал, enqueue означало, что вся работа будет выполняться по очереди, как очередь. Есть ли способ заставить его работать таким образом?

1 Ответ

0 голосов
/ 23 июня 2019

Вы можете использовать конструкцию WorkManager UniqueWork, чтобы иметь возможность ставить в очередь работу, чтобы она выполнялась только один раз.Уникальное произведение идентифицируется как uniqueName.

. В вашем случае вы должны использовать другой ExistingWorkPollicy, как описано в документации : ExistingWorkPollicy.APPEND,Это гарантирует, что ваш новый запрос будет добавлен после других запросов, используя тот же uniqueName (это фактически создает цепочку работы).

val workRequest = OneTimeWorkRequestBuilder<UploadWorker>()
            .setConstraints(networkConstraint)
            .build()
WorkManager.getInstance()
            .enqueueUniqueWork(uniqueName, ExistingWorkPolicy.APPEND, workRequest)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...