WorkManager beginUniqueWork没有按预期工作

时间:2018-06-02 13:42:11

标签: android android-workmanager

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

  return {
    ...state,
    data: {
      ...state.data,
      list: [action.payload.list, ...state.data.list]
    }
  }

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

使用enqueue,按预期工作

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); 。我尝试使用

使用beginUniqueWork,不起作用

SyncWorker

OneTimeWorkRequest oneTimeWorkRequest = new OneTimeWorkRequest.Builder(SyncWorker.class) .addTag(SyncWorker.TAG) .build(); WorkManager workManager = WorkManager.getInstance(); workManager.beginUniqueWork( SyncWorker.TAG, ExistingWorkPolicy.REPLACE, oneTimeWorkRequest ); 根本没有运行。

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

2 个答案:

答案 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
);