我正在排队 future 的工作,同时也在“现在”运行初始工作。在 20 个项目入队后,任何添加的新项目都不再立即运行,我将不得不等待 30 天才能看到它们是否运行;)
在将工作项的初始延迟设置为 10 秒(允许的最小值)后,我现在已经等待了超过 24 小时。
如果我安排第 21 个作业,则什么也不会发生。取消任何最初的 20 个作业和 10 秒后运行的第 21 个作业。 100% 可重复——重新安排作业 20,没有。取消作业 21,作业 20 将在 10 秒后运行。
dependencies {
implementation 'androidx.work:work-runtime:2.3.4'
}
fun scheduleTickle(context: Context, item: Item) {
// item.id is the auto-generated primary key from the database
val periodicWorkRequest = PeriodicWorkRequest.Builder(
MessageWorker::class.java,
item.minimumInterval,
TimeUnit.DAYS
).let {
it.setInputData(
Data.Builder()
.putLong("EXTRA_KEY_ITEM_ID", item.id)
.build()
)
it.setConstraints(
Constraints.Builder()
.setRequiredNetworkType(NetworkType.CONNECTED)
.build()
)
it.addTag("com.example.myapp.periodicWork.${item.id}")
it.setInitialDelay(10, TimeUnit.SECONDS)
}.build()
WorkManager.getInstance(context).enqueueUniquePeriodicWork(
item.id.toString(),
ExistingPeriodicWorkPolicy.REPLACE,
periodicWorkRequest
)
}
最佳答案
我要大胆猜测你的问题是:
How can I have more jobs?
WorkManager
将向 JobScheduler
或 AlarmManager
注册的最大作业数,默认情况下为 20。文档是有点奇怪,但是 setMaxSchedulerLimit()
的默认值是MIN_SCHEDULER_LIMIT
, 即 20。
原则上,您应该可以通过the custom configuration process 进行调整。 .
但是,如果我正确阅读了这些文档,则强制上限为 50 — 换句话说,您不能将高于 50 的值传递给 setMaxSchedulerLimit()
。
除非这些工作中的每一项都有完全独立的执行标准,否则您可能会考虑尝试合并一些。例如,根据您的代码,您可以使用一个作业,其时间段为 item.minimumInterval
值的最小公分母,其中作业的一部分工作是查看您的实际待办事项已准备好执行。
关于android - WorkManager 运行的作业不超过 20 个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61972975/