WorkManager 运行的作业不超过 20 个

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)

Com*_*are 6

我将冒险猜测你的问题是:

我怎样才能拥有更多的工作?

WorkManager默认情况下,使用JobScheduler或注册的最大作业数AlarmManager似乎是 20。文档有点奇怪,但是 的默认值setMaxSchedulerLimit()MIN_SCHEDULER_LIMIT20。

原则上,您应该能够通过自定义配置过程进行调整。

但是,如果我正确阅读这些文档,则有 50 的上限 - 换句话说,您不能将高于 50 的值传递给setMaxSchedulerLimit().

除非这些工作中的每一项都有完全独立的执行标准,否则您可能会考虑尝试合并一些工作。例如,根据您的代码,您可以使用一项作业,其时间段具有值的最小公分母item.minimumInterval,其中作业的部分工作是查看哪些实际要做的事情已准备好执行。