Bil*_*ote 2 android periodic-task android-workmanager
我正在对未来的工作进行排队,同时还“现在”运行初始工作。20 个项目加入队列后,添加的任何新项目都不再立即运行,我将不得不等待 30 天才能查看它们是否运行;)
将工作项的初始延迟设置为 10 秒(允许的最小值)后,我已经等待了 24 小时以上。
如果我安排第 21 份工作,什么也不会发生。取消 10 秒后运行的前 20 个和第 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
)
}
Run Code Online (Sandbox Code Playgroud)
我将冒险猜测你的问题是:
我怎样才能拥有更多的工作?
WorkManager默认情况下,使用JobScheduler或注册的最大作业数AlarmManager似乎是 20。文档有点奇怪,但是 的默认值setMaxSchedulerLimit()是MIN_SCHEDULER_LIMIT20。
原则上,您应该能够通过自定义配置过程进行调整。
但是,如果我正确阅读这些文档,则有 50 的上限 - 换句话说,您不能将高于 50 的值传递给setMaxSchedulerLimit().
除非这些工作中的每一项都有完全独立的执行标准,否则您可能会考虑尝试合并一些工作。例如,根据您的代码,您可以使用一项作业,其时间段具有值的最小公分母item.minimumInterval,其中作业的部分工作是查看哪些实际要做的事情已准备好执行。
| 归档时间: |
|
| 查看次数: |
2053 次 |
| 最近记录: |