Skip to content

Worker API (任务并行化)

源:使用 Worker API

传统的 Gradle Task 在 action 块中是单线程执行的。如果你要在 Task 中处理 1000 张图片,它们会排队执行。Worker API 允许你开启任务内部的并行化。

1. 核心优势

  • 并行执行: 自动利用多核 CPU。
  • 隔离性: 可以在独立的进程中运行任务逻辑(Process Isolation),防止内存溢出影响主构建进程。

2. 实现步骤

第一步:定义 WorkParameters (输入数据)

kotlin
interface MyWorkParameters : WorkParameters {
    val fileName: Property<String>
}

第二步:定义 WorkAction (逻辑实现)

kotlin
abstract class MyWorkAction : WorkAction<MyWorkParameters> {
    override fun execute() {
        // 这里的代码将并行运行
        println("正在处理: \${parameters.fileName.get()}")
    }
}

第三步:在 Task 中提交

kotlin
abstract class MyParallelTask : DefaultTask() {
    @get:Inject
    abstract val workerExecutor: WorkerExecutor

    @TaskAction
    fun run() {
        val queue = workerExecutor.noIsolation() // 也可以选 processIsolation()
        listOf("file1", "file2", "file3").forEach { name ->
            queue.submit(MyWorkAction::class.java) {
                fileName.set(name)
            }
        }
    }
}

3. 适用场景

  • 资源处理: 并行压缩图片、混淆资源。
  • 代码生成: 并行生成多个模块的 DSL。
  • 报告生成: 并行汇总多个测试报告。