WorkManager beginUniqueWork 没有按预期工作

WorkManager beginUniqueWork doesn't work as expected

目前,我正在使用 WorkManager 1.0.0-alpha02。

def work_version = "1.0.0-alpha02"
implementation "android.arch.work:work-runtime:$work_version" // use -ktx for Kotlin
// optional - Firebase JobDispatcher support
implementation "android.arch.work:work-firebase:$work_version"

当应用程序退出时,通过使用以下代码执行后台工作程序没有问题。

使用入队,按预期工作

OneTimeWorkRequest oneTimeWorkRequest =
        new OneTimeWorkRequest.Builder(SyncWorker.class)
                .addTag(SyncWorker.TAG)
                .build();

WorkManager workManager = WorkManager.getInstance();

workManager.enqueue(oneTimeWorkRequest);

因为,我想同时避免超过一个 SyncWorker 运行。我尝试使用

使用 beginUniqueWork,不起作用

OneTimeWorkRequest oneTimeWorkRequest =
        new OneTimeWorkRequest.Builder(SyncWorker.class)
                .addTag(SyncWorker.TAG)
                .build();

WorkManager workManager = WorkManager.getInstance();

workManager.beginUniqueWork(
        SyncWorker.TAG,
        ExistingWorkPolicy.REPLACE,
        oneTimeWorkRequest
);

SyncWorker 根本不是 运行。

我可以知道我错过了哪一步吗?谢谢。

beginUniqueWork()returns一个WorkContinuation object。您需要在 WorkContinuation 上调用 enqueue 以实际将其与 WorkManager 排队:

workManager.beginUniqueWork(
    SyncWorker.TAG,
    ExistingWorkPolicy.REPLACE,
    oneTimeWorkRequest
).enqueue();

@ianhanniballake 的回答当然是有帮助和正确的,但我想我要指出的是(随着快速发展 API)有一个 new enqueueUniqueWork() method 所以我猜OP 现在可以使用:

workManager.enqueueUniqueWork(
    SyncWorker.TAG,
    ExistingWorkPolicy.REPLACE,
    oneTimeWorkRequest
);