我将工人添加到队列中,如下所示。但是,有时不会触发工人。我怎么知道工人是否没有被处决,以便我可以重新入队?也许使用Operation
返回的enqueue()
实例?如何使用它?如果是这样,是否可以暗示未能触发工人的原因?
请注意,我不需要知道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();
答案 0 :(得分:0)
使用ExistingWorkPolicy.APPEND
,您正在创建工作链。
如果您在工作线程中返回Result.FAILURE
(如果发生错误),则所有工作链都将被取消。这也许就是为什么您有时看不到工人在跑的原因。
一种建议是向您的工作人员添加标签或ID,并使用Livedata和getStatusesByTagLivedata()
或getStatusesById()
观察状态。
您可以看看涵盖了本示例和其他示例的Android开发者峰会上展示的this talk。
答案 1 :(得分:0)
您可以观察工人,并通过使用方法getStatusByIdLiveData
进行观察来获得工人的状态
mWorkManager.getStatusByIdLiveData(yourWorkRequest.id)
.observe(lifeCycleOwner, Observer { workStatus ->
//here you can get the status of work
})
答案 2 :(得分:0)
可以观察到工作经理的操作状态。
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();
operation.getState().observe(ProcessLifecycleOwner.get(), (state -> {
if (state instanceof Operation.State.SUCCESS) {
// Handle success
} else if (state instanceof Operation.State.FAILURE) {
// Handle failure
}
}));