Android

JetpackのWorkManagerのメモ

投稿日:

JetpackのWorkManagerのメモです。

WorkManagerとは

  • Jetpackのコンポーネントで、スケジュールタスクのようなものを実行する
  • 即時性は求めないがアプリが終了した、端末が再起動した場合でも実行したい場合に使用する
  • 同様なことを実現するコンポーネントとしてAndroidにはJobSchedulerなどがある
  • 端末によってJobSchedulerとAlermManager + BroadcastRecivierなどを使って対応する
  • WorkManagerのminSdkVersionは14で特にAPIレベルに依存しないコードがかける
  • 一回きりの実行の他にCrontabのように定期間隔で実行することもできる
  • 実行時に例えばネットワークに接続できること制約を設定することができる
  • タスクをチェインさせることができる
  • タスクにはパラメーターを設定することができ実行時に取得できる(インテントのようなもの?)
  • ただしデータサイズ上限があるので注意すること(10KB)
  • RxJavaを使う場合コンポーネントを追加することで対応できる(RxWorker)

データベース

  • WorkManagerはアプリ内に専用のデータベースを作成しタスクなどの情報を管理している
  • タスクには一意のUUIDが割り当てられる
  • タスクはWorkSpecというテーブルに情報が格納される
  • 終了済みのタスクは一定期間後に削除される
    • タスク作成時に最低保存期間を指定することもできる

使ってみた感想

  • 一回きり実行の場合必ず遅延されるのではなく条件を満たせば実行される
  • 制約を満たさない場合はタスクの起動自体が行われない
  • WorkManager 2.1.0からJava8が要求される
  • APIレベルによって分岐があり、コンポーネントの重ね技など色々考慮しなければならないところをWorkManagerが見てくれるのは想像以上に安心感がある
  • RxJavaを使っている場合はRxWorkerを使うと楽。キャンセル時にDisposeもしてくれるみたい

参考サイト

  • WorkManager
    • WorkManagerを導入するなら読んでおいたほうがよいです
  • Android Developers WorkManager
    • 公式ドキュメント。意外に手厚く書かれている印象です
  • 実践 WorkManager
    • 実導入での注意点などが記載されています。ありがたいです。

実際プロダクションでも導入しています。
自分たちが使ったのは、特定の状態になった時にAPIにアクセスするというものです。
この時にネットワークが切断されていたり、サーバーの状態によってアクセスが失敗することがありました。
あの手この手でリトライをしていたのですが、それでもアプリを終了させたときの対応まではしていませんでした。
この処理をWorkManagerで行うことにしました。非常にうまく機能してくれています。
JetPackがすごい充実していることを実感できました。

-Android

執筆者:


comment

メールアドレスが公開されることはありません。

関連記事

アサーションライブラリのGoogle Truthを使ってみる

AndroidXのTestではGoogleのアサーションライブラリのTruthが使われるみたいです。 Set up project for AndroidX Test Truthを必ず使えというよりも …

Airbnb Epoxyで入力フォームを作ってみる

Airbnb Epoxyについてはいろいろな記事があるので詳しく説明を省かせていただきますが、RecyclerViewを使いやすくしてくれるライブラリです。 今回はEpoxyを使ってRecyclerV …

Android ConstraintLayoutのお勉強

Androidはいろいろ難しいところがあるのですが画面にビューを表示するレイアウトも慣れないと難しいものがあると思っています。 自分だけかもしれませんが簡単なレイアウトだなーと思って実際に配置してみた …

いつの間にかBottomNavigationにBadge機能がついていた・・・

先日、たまたまmaterial-components-androidのCatalogアプリを見ていたらBottomNavigationにBadge機能がついていました。 これ、最近追加されたんですかね …

Androidアプリ開発を行う前に知っておきたかったこと

Androidアプリ開発を行うようになってから半年以上経過しました。 最初の頃に比べてると習熟度は上がったと思うのですが、まだまだ知らないことが多くて毎日勉強の日々です。 自分がAndroidアプリ開 …