首页 > 解决方案 > 如何观察链式工作人员的 Android 工作人员进度

问题描述

我当前的 Android 应用程序为其后台进程使用了​​ Workers。

api "androidx.work:work-runtime:2.4.0"
api "androidx.work:work-runtime-ktx:2.4.0"

我将多个工人链接在一起,并希望报告每个工人的进度

我有一个问题,我只能从每个工作人员那里得到一个进度更新

当每个工人两次发布进度如下:-

覆盖挂起乐趣 doWork(): 结果 = coroutineScope { val startTime: Long = System.nanoTime()

    val progressName = "$PROGRESS_PRE_PIX$workerName"

    withContext(Dispatchers.IO) {
        try {
            setProgressAsync(workDataOf(progressName to 0))
            doActualWork()
        } finally {
            setProgressAsync(workDataOf(progressName to 100))
        }
    }
}

我永远观察到来自我的链式工作人员的 workInfos 继续,如下所示:-

 workContinuation.workInfosLiveData.observeForever { workInfos ->
                workInfos.forEach { workInfo ->
                    Timber.e("xoox - $workInfo")
                }
            }

我配置了详细的工作人员日志记录,每个工作人员都生成这些日志条目

2021-01-26 13:30:15.956  D/WM-WorkProgressUpdater: Updating progress for c9ef0d9a-f253-4403-944d-b9afb1a043ef (Data {PROGRESS-MyWorker : 0, })
2021-01-26 13:30:16.151  D/WM-WorkProgressUpdater: Updating progress for c9ef0d9a-f253-4403-944d-b9afb1a043ef (Data {PROGRESS-MyWorker : 100, })

但是我的观察者只注销了 1 个条目

xoox - WorkInfo{mId='70251d4e-882d-4ab8-946f-20cfba2d767a', mState=RUNNING, mOutputData=Data {}, mTags=[com.mendeley.refmanager.background.work.worker.GroupWorker], mProgress=Data {PROGRESS-MyWorker : 0, }}

我究竟做错了什么?

为什么我看不到setProgressAsync(workDataOf(progressName to 100))日志?

标签: androidandroid-workmanager

解决方案


推荐阅读