Jetpack Workmanager没有返回成功

时间:2018-11-26 13:53:30

标签: android android-workmanager

我正在使用android.arch.work:work-runtime-ktx:1.0.0-alpha11,并且遇到了运行Android 7.0的Samsung 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

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

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

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