2 回答
TA贡献1836条经验 获得超5个赞
根据WorkInfo
文档:
请注意,输出仅适用于终端状态(WorkInfo.State.SUCCEEDED和WorkInfo.State.FAILED)。
对于定期工作,每次运行都会重复使用相同的 ID,这意味着工作永远不会到达SUCCEEDED
- 相反,工作会立即转换回ENQUEUED
,等待下一次定期运行。因此,您所经历的似乎是预期的行为。
正如您所看到的,使用一次性工作不会出现这种行为,因为工作实际到达SUCCEEDED
并且每次后续运行(如果您的一次性工作要重新安排相同类型的工作)都会有一个新的 ID。另一种选择是不使用输出数据,而是将定期工作的结果存储在您自己的数据库中。
TA贡献1804条经验 获得超8个赞
另一种选择是观察中间 Worker 进度
在您的 ServerRequestsWorker 中:
val outputProgress = workDataOf(KEY_MESSAGE to "This is progress message")
setProgress(outputProgress)
然后在你的 MainActivity 中:
workManager.getWorkInfoByIdLiveData(workRequest.getId())
.observe(this, new Observer<WorkInfo>() {
@Override
public void onChanged(@Nullable WorkInfo workInfo) {
if (workInfo != null) {
Log.d(LOG_TAG, "WorkInfo received: state: " + workInfo.getState());
String message = workInfo.getProgress().getString(ServerRequestsWorker.KEY_MESSAGE);
Log.d(LOG_TAG, "message: " + message);
}
}
});
添加回答
举报