現在、WorkManager1.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
を実行することは避けたいと思います。使ってみます
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
オブジェクト を返します。実際にWorkManagerでキューに入れるには、そのenqueue
でWorkContinuation
を呼び出す必要があります。
workManager.beginUniqueWork(
SyncWorker.TAG,
ExistingWorkPolicy.REPLACE,
oneTimeWorkRequest
).enqueue();
@ianhanniballakeからの回答はもちろん役に立ち、正しいですが、(急速に進化するAPIでは) new enqueueUniqueWork()
method があることを指摘したいと思いました。 OPが使用できるようになったと思います。
workManager.enqueueUniqueWork(
SyncWorker.TAG,
ExistingWorkPolicy.REPLACE,
oneTimeWorkRequest
);