Как узнать, не сработал ли работник или не был ли выполнен в очереди? - PullRequest
0 голосов
/ 14 ноября 2018

Я добавляю работников в очередь, как показано ниже.Однако, иногда рабочий не будет вызван.Как я могу узнать, что работник не был казнен, чтобы я мог попытаться повторно поставить его в очередь?Может быть, использовать экземпляр Operation, возвращаемый enqueue()?Как это использовать?Если да, возможно ли получить подсказку о причине сбоя при запуске Worker?

Обратите внимание, что мне не нужно знать, произошел ли сбой Worker (return Result.FAILURE).Случай, который я хочу рассмотреть, - это когда работник даже не вызывается, что иногда случается.

OneTimeWorkRequest sendMessageWorker = new OneTimeWorkRequest.Builder(SendMessageWorker.class)
        .setInputData(data)
        .setBackoffCriteria(BackoffPolicy.LINEAR, backOffDelayInMillis, TimeUnit.MILLISECONDS)
        .build();

Operation operation = WorkManager.getInstance()
        .beginUniqueWork(SendMessageWorker.class.getSimpleName(), ExistingWorkPolicy.APPEND, sendMessageWorker)
        .enqueue();

Ответы [ 2 ]

0 голосов
/ 16 ноября 2018

Вы можете наблюдать за работником и получить состояние работника, наблюдая, используя метод getStatusByIdLiveData

mWorkManager.getStatusByIdLiveData(yourWorkRequest.id)
        .observe(lifeCycleOwner, Observer { workStatus ->
            //here you can get the status of work
        })
0 голосов
/ 15 ноября 2018

Используя ExistingWorkPolicy.APPEND, вы создаете цепочку работы.
Если вы вернете Result.FAILURE в вашем Worker (в случае ошибки), вся цепочка работ будет отменена. Возможно, это причина того, что вы иногда не видите работающего работника.

Одним из предложений является добавление тега или идентификатора вашему работнику и наблюдение за состоянием с использованием Livedata и getStatusesByTagLivedata() или getStatusesById().

Вы можете взглянуть на этот доклад , представленный на Саммите разработчиков Android, который охватывает этот и другие примеры.

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