WorkManager 中的Data 类仅适用于基本类型及其数组。你不能用它来传递一只羊羔。
一种可能的解决方案是自定义 WorkManager 的初始化 as explained in the documentation,并使用自定义 WorkerFactory 将参数添加到可用于检索 lambda 的构造函数。请记住,您只在初始化时配置一次 WorkManager。这意味着您可以直接将 lambda 作为附加参数传递,但无法为每个 WorkRequest 自定义它。
根据您想要达到的具体目标,可以使用类似的东西作为起点:
// provide custom configuration
val config = Configuration.Builder()
.setMinimumLoggingLevel(android.util.Log.INFO)
.setWorkerFactory(MyWorkerFactory(lambda))
.build()
//initialize WorkManager
WorkManager.initialize(this, config)
val workManager = WorkManager.getInstance()
然后有你的 WorkerFactory:
class MyWorkerFactory(private val lambda: Unit) : WorkerFactory() {
override fun createWorker(appContext: Context,
workerClassName: String,
workerParameters: WorkerParameters): MyWorker {
return MyWorker(appContext, workerParameters, lambda)
}
}
然后你可以让你的工人使用新的构造函数:
class MyWorker(val context: Context, workerParams: WorkerParameters, private val lambda: Unit) : Worker(context, workerParams) {
override fun doWork(): Result {
//Passed from the WorkManager's configuration
lambda()
return Result.success()
}
}
记得禁用添加到AndroidManifest.xml的默认WorkManager初始化:
<provider
android:name="androidx.work.impl.WorkManagerInitializer"
android:authorities="${applicationId}.workmanager-init"
tools:node="remove" />