Я использую android.arch.work:work-runtime-ktx:1.0.0-alpha11 и столкнулся с проблемой на Samsung Galaxy S8 + под управлением Android 7.0. С другими устройствами работает нормально.
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
Есть ли на данный момент способ обойти эту проблему?
вы можете наблюдать за статусом, подписавшись непосредственно на возвращаемое значение enqueue(), например:
val workOperation = workManager.beginUniqueWork(LICENSE_UPLOAD_WORKER, ExistingWorkPolicy.REPLACE, work).enqueue()
workOperation.state.observe(this, Observer { state ->
Timber.d("state: $state")
})
Мне нужно было состояние, находящееся довольно далеко от всех lifecycleOwners (UI), но я все же реализовал обходной путь с помощью LiveData.
У меня была такая же проблема во время цикла разработки моего приложения (на другом устройстве). Решением для меня было просто удалить мое приложение. В следующий раз, когда я запустил его из Android Studio, все заработало.
Как вы наблюдаете за LiveData, возвращаемым WorkManager? есть пример в Codelab WorkManager: codelabs.developers.google.com/codelabs/android-workmanager- kt /…