工作管理器开始唯一工作未按预期工作



目前,我正在使用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()返回一个WorkContinuation对象。您需要在该WorkContinuation上调用enqueue才能实际将其与WorkManager排队:

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

@ianhanniballake的答案当然是有帮助和正确的,但我想我会指出(使用快速发展的 API(有一种新的enqueueUniqueWork()方法,所以我想 OP 现在可以使用:

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

相关内容

最新更新