Jetpack WorkManager无法返回成功状态。

4

我正在使用 android.arch.work:work-runtime-ktx:1.0.0-alpha11,并在运行 Android 7.0 的三星 Galaxy S8+ 上遇到了问题。但在其他设备上,它可以正常工作。

    val constraints = Constraints.Builder()
            .setRequiredNetworkType(NetworkType.CONNECTED)
            .build()
    val inputData: Data = Data.Builder()
            .putString(INPUT_DATA_FRONT_URI, front?.toString())
            .putString(INPUT_DATA_BACK_URI, back?.toString())
            .build()
    val work = OneTimeWorkRequestBuilder<LicenseUploadWorker>()
            .setConstraints(constraints)
            .setInputData(inputData)
            .build()
    workManager.beginUniqueWork(LICENSE_UPLOAD_WORKER, ExistingWorkPolicy.REPLACE, work)
            .enqueue()

工作已经安排并成功执行,但是我从这里获取的LiveData

workManager.getWorkInfoByIdLiveData(work.id)

工作状态更新从未达到WorkInfo.State.SUCCEEDED。从日志中可以看出,工作顺利完成:

11-26 12:12:03.693 6820 6852 I WorkerWrapper: Worker result SUCCESS for Work

现在有解决这个问题的方法吗?

你是如何观察由WorkManager返回的LiveData的?在WorkManager的Codelab中有一个示例:https://codelabs.developers.google.com/codelabs/android-workmanager-kt/#7 - pfmaggi
2个回答

1

您可以通过直接订阅enqueue()的返回值来观察状态,例如:

val workOperation = workManager.beginUniqueWork(LICENSE_UPLOAD_WORKER, ExistingWorkPolicy.REPLACE, work).enqueue()

workOperation.state.observe(this, Observer { state ->
     Timber.d("state: $state")
})

我需要将状态与所有的生命周期所有者(用户界面)保持相当远的距离,但最终仍然使用LiveData实现了解决办法。 - Євген Гарастович

0

在我的应用程序开发周期中(在另一台设备上),我也遇到了同样的问题。对我来说,解决方案就是卸载我的应用程序。下一次我从Android Studio启动它时,一切都正常了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接