【发布时间】:2018-12-10 19:42:23
【问题描述】:
我发现工作管理器 (alpha-12) 的这种奇怪行为在入队后不执行作业。将工作排入队列的代码如下。
fun enqueue(phoneNumber: String?,priorityId: String? = null): ListenableFuture<WorkInfo> {
return WorkManager.getInstance().run {
val work = OneTimeWorkRequestBuilder<ContentDownloaderWork>()
.addTag(TIMESTAMP)
.setInputData(workDataOf(PHONE to phoneNumber, PRIORITY_ID to priorityId))
.setBackoffCriteria(BackoffPolicy.EXPONENTIAL, 1, TimeUnit.SECONDS)
.setConstraints(Constraints.Builder().setRequiredNetworkType(NetworkType.CONNECTED).build())
.build()
beginUniqueWork(TIMESTAMP + priorityId.orEmpty(), ExistingWorkPolicy.APPEND, work).enqueue()
getWorkInfoById(work.id)
}
}
每次应用启动时,我都会将这项工作排入队列。我正在做的是在从服务器下载文件的工作过程中杀死我的应用程序。每次我重新打开我的应用程序时它都会成功重启,但次数有限。
它似乎有某种队列被填满并且不允许任何更多的作业入队。当我按标签检查所有可用作业时,它显示有些已取消,有些已成功,但是当我尝试将新工作排入队列时,它什么也不做。
那么这是 workmanager 中的错误还是我做错了什么?
【问题讨论】:
-
你的工人有没有返回
Result.failure()?因为无法追加失败的工作链。 -
@ianhanniballake 不,要么重试,要么成功。但是如果应用进程被杀死,会存储什么结果呢?
标签: android kotlin android-jetpack android-workmanager