以下是代码
var syncItemWork = OneTimeWorkRequestBuilder<SyncItemWorker>().addTag(SYNC_ITEM_ONE_TIME).build()
var pullMastersWork = OneTimeWorkRequestBuilder<SyncMasterWorker>().addTag(SYNC_MASTER_ONE_TIME).build()
var pullLabelsWork = OneTimeWorkRequestBuilder<SyncLabelWorker>().addTag(SYNC_LABEL_ONE_TIME).build()
var syncMovementWork = OneTimeWorkRequestBuilder<SyncMovementWorker>().addTag(SYNC_MOVEMENT_ONE_TIME).build()
var continuation = WorkManager.getInstance().beginUniqueWork("manual_sync", ExistingWorkPolicy.APPEND, pullMastersWork)
.then(pullLabelsWork)
.then(syncMovementWork)
.then(syncItemWork)
continuation.enqueue()
为了检查状态,我使用以下代码:
WorkManager.getInstance().getStatusById(syncItemWork.id).observe(this,
Observer { status ->
Timber.d("getStatusById:$status")
if (status != null && status.state.isFinished) {
manualSync.isEnabled = true
GlideApp.with(this).load(R.drawable.ic_sync).diskCacheStrategy(DiskCacheStrategy.RESOURCE).into(ivManualSync)
var lastSyncTime = DateUtils.getRelativeTimeSpanString(PreferenceManager.getDefaultSharedPreferences(activity as Context).getLong(PREF_KEY_LAST_SYNC_TIME, 0),
System.currentTimeMillis(),
DateUtils.SECOND_IN_MILLIS,
DateUtils.FORMAT_ABBREV_RELATIVE
)
view.findViewById<TextView>(R.id.txtName).text = lastSyncTime
}
})
工作没有进入队列,状态为BLOCKED,并且在日志中显示: 由于前提条件未成功完成而当前被阻止的工作状态
答案 0 :(得分:0)
您的Worker
有没有完成?
您正在使用APPEND
,因此创建了一个很长的工作继续时间。如果您无法正确处理错误条件,那么您必然会陷入以下状态:后续Worker
被先决条件阻止,或者它们完全失败,因为在某个时刻{{1} }。如果您想执行最新的链,也许可以考虑使用FAILED
代替?