WorkManager でタスクのスケジュールを設定する Android Jetpack の一部
WorkManager は、アプリが終了した場合やデバイスが再起動した場合でも実行される、延期可能な非同期タスクのスケジュールを簡単に設定するための API です。WorkManager API は、FirebaseJobDispatcher、GcmNetworkManager、ジョブ スケジューラなど、以前のすべての Android バックグラウンド スケジューリング API の代わりに使用することが推奨されています。WorkManager では、以前の API の機能が、API レベル 14 でも機能する、一貫性のある最新の API に組み込まれると同時に、電池寿命も考慮されています。
WorkManager の内部では、次の条件に基づいて基盤となるジョブ ディスパッチ サービスが使用されます。
注: Android 10(API レベル 29)以降をターゲットとしているアプリの場合、FirebaseJobDispatcher と GcmNetworkManager の API 呼び出しは、Android Marshmallow(6.0)以降を搭載したデバイスでは機能しなくなります。移行方法については、FirebaseJobDispatcher と GcmNetworkManager の移行ガイドをご覧ください。また、サポート終了に関する詳細については、Android でのバックグラウンド タスク スケジューリングの統合のお知らせをご覧ください。
機能
WorkManager には、よりシンプルで一貫性のある API を提供するという点だけでなく、次のような重要なメリットがあります。
処理の制約
処理の制約を使用して、処理の実行に最適な条件を宣言的に定義します(たとえば、デバイスが Wi-Fi につながっているとき、アイドル状態のとき、十分な保存容量があるときにだけ実行します)。
強力なスケジュール設定
WorkManager では、柔軟なスケジューリング ウィンドウを使用して、1 回限り、または繰り返し実行するように処理のスケジュールを設定できます。処理にタグや名前を付けて、一意で置き換え可能な処理のスケジュール設定、処理グループのモニタリングやキャンセルをまとめて行うことができます。スケジュール設定された処理は、内部で管理されている SQLite データベースに保存されます。WorkManager により、デバイスの再起動後もこの処理が確実に保持され、スケジュールの再設定が行われます。また、WorkManager は Doze モードなどの省電力機能やベスト プラクティスに従うため、電力消費を気にする必要はありません。
柔軟な再試行ポリシー
処理は失敗することもあります。WorkManager には、設定可能な指数バックオフ ポリシーなど、柔軟な再試行ポリシーが用意されています。
処理の連結
複雑な作業の場合は、シームレスで自然なインターフェースを使用して個々の処理タスクを連結することにより、どの部分を順次実行し、どの部分を並列実行するかを制御できます。
Kotlin
WorkManager.getInstance(...) .beginWith(listOf(workA,workB)) .then(workC) .enqueue()
Java
WorkManager.getInstance(...) .beginWith(Arrays.asList(workA, workB)) .then(workC) .enqueue();
各処理タスクでは、その処理の入出力データを定義できます。処理を連結すると、WorkManager により、1 つの処理タスクの出力データが自動的に次の処理タスクに渡されます。
組み込みスレッドの相互運用性
WorkManager は、RxJava や Coroutines とシームレスに統合し、独自の非同期 API に接続するための柔軟性を提供します。
遅延可能で確実に実行する処理に WorkManager を使用する
WorkManager は、アプリが終了したりデバイスが再起動したりしても確実に実行する必要がある遅延可能な処理(つまり、直ちに実行する必要がない処理)を対象としています。次に例を示します。
- ログやアナリティクスをバックエンド サービスに送信する
- アプリデータをサーバーと定期的に同期する
WorkManager は、アプリプロセスが終了しても安全に終了可能な処理中のバックグラウンド処理や、直ちに実行する必要がある処理を対象としていません。バックグラウンド処理ガイドでニーズを満たすソリューションを見つけてください。
スタートガイド
スタートガイドを参照して、アプリで WorkManager の使用を開始してください。
参考情報
動画
- WorkManager の操作(2018 年の Android Dev Summit)
- WorkManager: 基本から応用へ(2019 年の Android Dev Summit)