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。
- 报告生成: 并行汇总多个测试报告。