我在 "现在 "运行初始工作的同时,也在为未来的工作排队。 在20个项目被列入队列后,任何被添加的新项目不再立即运行,我将不得不等待30天才能看到它们是否运行;)
在将一个工作项目的初始延迟设置为10秒(允许的最小值)后,我已经等了超过24小时。
如果我安排了第21个工作,什么都没有发生。 取消任何一个初始的20个工作,第21个工作在10秒后运行。 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
)
}
我大胆猜测你的问题是。
我怎样才能有更多的工作?
最多可以有多少个工作?WorkManager
将向 JobScheduler
或 AlarmManager
默认情况下,似乎是20。文件有点奇怪,但是默认值是20。setMaxSchedulerLimit()
是 MIN_SCHEDULER_LIMIT
,也就是20。
原则上,你应该可以通过以下方式来调整它 自定义配置过程.
然而,如果我没有看错的话,有一个强加的上限是50,换句话说,你不能把一个高于50的值传递给 setMaxSchedulerLimit()
.
除非这些工作中的每一项都有完全独立的执行标准,否则你可以考虑尝试合并一些工作。例如,根据你的代码,你可以使用一个工作,其时间段的最低共同点为 item.minimumInterval
值,其中工作的一部分是看你实际要做的事情中哪些是可以执行的。