一意処理

一意処理とは、特定の名前が付けられた処理チェーンが同時に 1 つだけ存在することを保証する強力な概念です。一意の名前は id とは異なり、人間が読むことができ、WorkManager が自動生成するのではなくデベロッパーが指定します。また、タグとは異なり、1 つの処理チェーンにのみ関連付けられます。

一意処理シーケンスを作成するには、WorkManager.enqueueUniqueWork(String, ExistingWorkPolicy, OneTimeWorkRequest) または WorkManager.enqueueUniquePeriodicWork(String, ExistingPeriodicWorkPolicy, PeriodicWorkRequest) を呼び出します。1 つ目の引数は一意の名前で、これが WorkRequest を特定する際に使用するキーになります。2 つ目の引数は競合解決ポリシーで、一意の名前が付けられた未完了の処理チェーンがまだ存在する場合に WorkManager が行う必要がある処理を指定します。

  • REPLACE - 既存のチェーンをキャンセルし、新しいチェーンに置き換えます。
  • KEEP - 既存のシーケンスを維持して、新しいリクエストを無視します。
  • APPEND - 既存のシーケンスに新しいシーケンスを追加して、既存のシーケンスの最後のタスクが完了した後に新しいシーケンスの最初のタスクを実行します。APPENDPeriodicWorkRequest を併用することはできません。

一意処理は、複数回キューに登録すべきではないタスクがある場合に役立ちます。たとえば、データをネットワークに同期する必要があるアプリの場合、「sync」という名前のシーケンスをキューに登録し、その名前のシーケンスがすでに存在する場合は新しいタスクを無視するように指定できます。一意処理シーケンスは、長いタスクチェーンを段階的に構築する必要がある場合にも役立ちます。たとえば、写真編集アプリで、一連の編集を元に戻すことができる機能を提供しているとします。元に戻す操作はそれぞれ時間がかかる可能性がありますが、正しい順序で実行する必要があります。この場合、アプリは「元に戻す」用のチェーンを作成し、元に戻す各操作を必要に応じてチェーンに追加することができます。

一意処理のチェーンを作成する必要がある場合は、beginWith() の代わりに WorkManager.beginUniqueWork(String, ExistingWorkPolicy, OneTimeWorkRequest) を使用できます。