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);
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? });
添加回答
舉報