WorkManager でタスクのスケジュールを設定する   Android Jetpack の一部

WorkManager は、アプリが終了した場合やデバイスが再起動された場合でも実行される、信頼性の高い非同期タスクのスケジュールを簡単に設定するための API です。WorkManager API は、FirebaseJobDispatcherGcmNetworkManagerJobSchedulerなど、以前のすべての Android バックグラウンド スケジューリング API の適切な代替策として推奨されています。WorkManager では、以前の API の機能が、API レベル 14 でも機能する、一貫性のある最新の API に組み込まれると同時に、電池寿命も考慮されています。

WorkManager の内部では、次の条件に基づいて基盤となるジョブ ディスパッチ サービスが使用されます。

デバイスが API レベル 23 以上で動作している場合、JobScheduler が使用されます。API レベル 14~22 では、利用可能な場合は GcmNetworkManager が選択されます。それ以外の場合は、カスタムの AlarmManager と BroadcastRecever の実装がフォールバックとして使用されます。

注: Android 10(API レベル 29)以降をターゲットとしているアプリの場合、FirebaseJobDispatcher と GcmNetworkManager の API 呼び出しが、Android Marshmallow(6.0)以降を搭載したデバイスでは機能しません。移行方法については、FirebaseJobDispatcherGcmNetworkManager の移行ガイドをご覧ください。また、非推奨となったこれらのライブラリについて詳しくは、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コルーチンシームレスに統合し、独自の非同期 API に接続するための柔軟性を提供します。

作業の信頼性を高めるために WorkManager を使用する

WorkManager は、ユーザーが画面から移動した場合、アプリが終了した場合、デバイスが再起動された場合でも、確実に実行する必要がある作業を対象としています。次に例を示します。

  • ログやアナリティクスをバックエンド サービスに送信する
  • アプリデータをサーバーと定期的に同期する

直ちに実行する必要がある処理や、アプリプロセスが終了した場合に安全に終了できるインプロセス バックグラウンド処理は、WorkManager の対象にはなりません。バックグラウンド処理ガイドでニーズを満たすソリューションを見つけてください。

スタートガイド

スタートガイドを参照して、アプリで WorkManager の使用を開始してください。

参考情報

動画

ブログ