如何将工作参数传递给 WorkManager 类

Shy*_*dda 5 kotlin android-workmanager

在我的一个 android(使用 Kotlin)应用程序中,我想使用 WorkManager 类作为通用类。这是我的类,我想通过传递预期的参数将其用作通用类:

class CommonWorkManager<P, R> (appContext: Context, workerParams: WorkerParameters) : Worker(appContext, workerParams)
{
    var lambdaFunction: ((P) -> R)? = null

    override fun doWork(): Result {
        lambdaFunction
        return Result.SUCCESS
    }
}
Run Code Online (Sandbox Code Playgroud)

这就是我尝试创建此类的实例的方式:

CommonWorkManager<Unit, Unit>(context!!, ).lambdaFunction= {
    presenter?.fetchMasterData()
}
Run Code Online (Sandbox Code Playgroud)

那么我如何workerParams作为第二个参数传递。

这里'P'是参数,'R'是返回类型 CommonWorkManager<P, R>

Ser*_*gey 2

看来我们无法创建 的实例,WorkerParameters因为它隐藏了带有注释的构造函数@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)。根据文档,我们不创建Worker子类的实例,库为我们创建了它:

首先,您将定义您的Worker类,并重写其doWork()方法。您的工作程序类指定如何执行操作,但没有有关任务应何时运行的任何信息。OneTimeWorkRequest接下来,您基于该对象创建一个对象Worker,然后使用以下命令将任务排入队列WorkManager

val work = OneTimeWorkRequest.Builder(CommonWorkManager::class.java).build()
WorkManager.getInstance().enqueue(work)
Run Code Online (Sandbox Code Playgroud)

我们可以得出结论,我们无法创建 universal Worker,即CommonWorkManager<P, R>在您的情况下。WorkManager用于特定任务。