はじめに
Android Jetpackで追加されたWorkManagerを学習してみます。
今更感がありますが、改めて確認してみると、かなり便利な機能です。
似たような機能としてJobSchedulerもあります。JobSchedulerについてはこちらの記事を確認してください。
公式サイトを見ながら必要となる技術を説明していきます。下記の表は記事を掲載するたびに更新していきます。
タイトル | 内容 | リンク |
---|---|---|
いまさらWorkManager〜基本編①(必要最小限で実装:1回のみの実行)〜 | 一度だけのバックグラウンド処理の実装方法 | https://qiita.com/naoi/items/283f522d3f49c998d36d |
いまさらWorkManager〜基本編②(処理の起動条件を設定する)〜 | 実行条件の実装方法 | https://qiita.com/naoi/items/e27c7b70c6401ce2c39c |
いまさらWorkManager〜基本編③(繰り返し処理を実行する)〜 | 定期的に処理を実行する設定方法 | https://qiita.com/naoi/items/5ca4ee0b4b8520649365 |
いまさらWorkManager〜基本編④(状態の確認とキャンセル)〜 | WorkManagerに登録されているWorkの取得やWorkの状態、キャンセル方法 | https://qiita.com/naoi/items/59775846b8a3702c52a1 |
いまさらWorkManager〜基本編⑤(Workerクラスにデータを渡す)〜 | Workerに任意のデータをを渡したいときのやり方 | https://qiita.com/naoi/items/74411259815aabfdaaf8 |
いまさらWorkManager〜基本編⑥(唯一無二のWorker)〜 | Workerをユ一意に、1つしかない状態にする方法 | https://qiita.com/naoi/items/df1ea9bd89239ce041f5 |
上記の記事で「いまさらWorkManager」を説明していきます。
WorkManagerの概要
WokrManagerは以下の状況下で、定期的に非同期的なタスクをスケジュールできます。
- アプリが終了している
- デバイスが再起動した
図で表すとこのようになります。
WorkManagerが提供している機能
WorkManagerは以下の機能を提供しています。
- APIレベル14以降の下位互換とAPIレベル23以降の互換
- APIレベル23以降ではJobSchedulerが同等の機能を提供しています。
- APIレベル14〜22までは、BroadcastReceiver と AlarmManagerの組み合わせで同等の機能を提供しています。
- ネットワークやバッテリーといった端末の状態に併せて、スケジューリングしたタスクの実行の要否を判断できます。
- 1回限りの非同期タスクを設定できます。
- スケジューリングしたタスクのモニタリングや制御をできます。
- タスクをチェーンできます。
- アプリやデバイスが再起動してもスケジューリングしたタスクは実行されることが保証されています。
使い所
公式では以下のようなケースを想定しているようです。
- 定期的にサーバへ接続する
- ログまたは分析結果をバックエンドサービスに送信する
使っていは行けないケース
公式では以下のようなケースは使うべきでないと言っています。
- アプリ終了時の終了処理
- 即時実行が必要なタスク
まとめ
古い端末や新しい端末まで幅広く対応している事がわかります。
特に、「BroadcastReceiver と AlarmManager」の組み合わせは懐かしさすら感じさせます。
だからといって、JobSchedulerにしてしまうと、APIレベル23以降が対象になってしまうといった悩みも解消してくれるようです。
昨今の端末に対応するにはWorkManagerが有効そうですね。
次回の記事では、実際の使い方について説明していきます。