【发布时间】:2019-03-30 16:47:10
【问题描述】:
我需要将文件从设备上传到我的应用程序。我使用 WorkManager 在后台执行此操作。
将库从 android.arch.work:work-runtime:1.0.0-alpha04 更新到 androidx.work:work-runtime:2.0.0 后出现问题。
方法doWork()没有调用我的UploadFileTask(workerParams: WorkerParameters) : Worker(Application.getContext(), workerParams)
这是我上传的方式:
fun upload(id: String, file: File, params: FileStorage.DocParams?, additionalTag: String): File {
cancelUploadIfWas(file)
fileStorage.save(file, params)
val inputData = Data.Builder().putString(FileTask.PATH_KEY, file.path).build()
val uploadWork = OneTimeWorkRequest.Builder(UploadFileTask::class.java)
.addTag(ID_PREFIX + id)
.addTag(PATH_PREFIX + file.path)
.addTag(UPLOAD_TAG)
.addTag(additionalTag)
.keepResultsForAtLeast(0, TimeUnit.SECONDS)
.setInputData(inputData)
.build()
workManager.enqueue(uploadWork)
file.uploadStatus.onLoading()
file.uploadWork=uploadWork
uploadingFiles.put(ID_PREFIX + id, file)
workManager.getWorkInfoByIdLiveData(uploadWork.id).observe(this, uploadObserver)
return file
}
但我的uploadObserver 恰好在State.ENQUEUED 之后收到State.FAILED
我做错了什么?
【问题讨论】:
-
版本 2.0.0 仅适用于 androidx,您是否使用它而不是支持库?
-
@ronginat 是的,我已经将我所有的支持库都更新到了 AndroidX
-
您的
UploadFileTask实现中可能存在问题。 -
设置四个不同的标签来识别您的 WorkRequest 有什么特别的原因吗?然后,您将设置保持结果大约等于 0 的最小持续时间。这似乎很危险,因为它可能会在您查询其状态之前被修剪。将其设置为 0 的原因是什么?
-
谢谢大家,问题解决了
标签: android androidx android-workmanager