工作管理员运行的作业不超过20个

问题描述 投票:0回答:1

我在 "现在 "运行初始工作的同时,也在为未来的工作排队。 在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
    )
}
android android-workmanager periodic-task
1个回答
2
投票

我大胆猜测你的问题是。

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

最多可以有多少个工作?WorkManager 将向 JobSchedulerAlarmManager默认情况下,似乎是20。文件有点奇怪,但是默认值是20。setMaxSchedulerLimit()MIN_SCHEDULER_LIMIT,也就是20。

原则上,你应该可以通过以下方式来调整它 自定义配置过程.

然而,如果我没有看错的话,有一个强加的上限是50,换句话说,你不能把一个高于50的值传递给 setMaxSchedulerLimit().

除非这些工作中的每一项都有完全独立的执行标准,否则你可以考虑尝试合并一些工作。例如,根据你的代码,你可以使用一个工作,其时间段的最低共同点为 item.minimumInterval 值,其中工作的一部分是看你实际要做的事情中哪些是可以执行的。

© www.soinside.com 2019 - 2024. All rights reserved.