Количество заданий, которые могут выполняться одновременно, фактически определяется настраиваемым пулом потоков. По умолчанию Executor
определено здесь .
Обычно, когда вы используете базовый класс Worker
, вы связываете экземпляр Worker
с потоком в этом Executor
. Если вы хотите лучше контролировать, с каким потоком связан ваш Worker
, вы можете взглянуть на CoroutineWorker
или ListenableWorker
.
Количество потоков по умолчанию Executor
определяется количеством ядер на устройстве. Если вы хотите, чтобы одновременно выполнялись только задания N
, вы должны сделать следующее:
Отключить инициализатор WorkManager
по умолчанию (отключив объединение манифестов для поставщика контента) .
Инициализируйте WorkManager
на Application.onCreate()
или свой собственный ContentProvider
. Вы должны сделать это здесь, потому что ОС может запросить запуск запланированных Worker
s. Для получения дополнительной информации посмотрите this .
val configuration = Configuration.Builder()
// Defines a thread pool with 2 threads.
// This can be N (typically based on the number of cores on the device)
.setExecutor(Executors.newFixedThreadPool(2))
.build()
WorkManager.initialize(context, configuration)
. В приведенном выше примере я создаю пул потоков фиксированного размера с 2 потоками (которые, в свою очередь, могут обрабатывать 2 Workers
одновременно). Теперь, когда вы ставите в очередь свои Worker
s, вы увидите, что только 2 из них выполняются одновременно.