目前,我正在使用WorkManager 1.0.0-alpha02。
return {
...state,
data: {
...state.data,
list: [action.payload.list, ...state.data.list]
}
}
当应用程序退出时,使用以下代码执行后台工作程序没有问题。
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
OneTimeWorkRequest oneTimeWorkRequest =
new OneTimeWorkRequest.Builder(SyncWorker.class)
.addTag(SyncWorker.TAG)
.build();
WorkManager workManager = WorkManager.getInstance();
workManager.beginUniqueWork(
SyncWorker.TAG,
ExistingWorkPolicy.REPLACE,
oneTimeWorkRequest
);
根本没有运行。
我可以知道我错过了哪一步吗?谢谢。
答案 0 :(得分:12)
beginUniqueWork()
会返回WorkContinuation
object。您需要在enqueue
上调用WorkContinuation
来实际使用WorkManager将其排队:
workManager.beginUniqueWork(
SyncWorker.TAG,
ExistingWorkPolicy.REPLACE,
oneTimeWorkRequest
).enqueue();
答案 1 :(得分:2)
@ianhanniballake的答案当然是有用和正确的,但是我想指出(使用快速发展的API)有一个new enqueueUniqueWork()
method,所以我想OP可以现在使用:
workManager.enqueueUniqueWork(
SyncWorker.TAG,
ExistingWorkPolicy.REPLACE,
oneTimeWorkRequest
);