どろあそび (9)
「Android Kotlin の基礎」のレッスン9はリポジトリとWorkManagerを扱います。
リポジトリはネットワークサービスからのデータをローカルストレージに保存し、アプリはローカルストレージから読み出すことでオフライン時もデータを利用できるようにする技術で、新しいライブラリやAPIを導入するのではなく、これまでのレッスンで扱ってきたライブラリやAPIの組み合わせにより実現されています。
リポジトリで使用するローカルストレージにはいくつかの構成が考えられますが、このレッスンでは構造化されたデータの保存に最も適したRoomデータベースライブラリを使用する例が扱われています。
また、ローカルストレージに保存されるデータを自動的に更新する枠組みとして、バックグラウンドでの定期的な実行を可能とするWorkManagerの使用例も扱われています。
WorkManagerは最小繰り返しインターバルが15分と長いので、リアルタイムでのデータ取得には対応していませんが、課金接続時は起動しない、バッテリー動作中は起動しないといった制約条件の設定が可能ですので、比較的大容量のデータも扱うことが可能になります。
最初の項目「Repository」はRetrofitとMoshiを使用して受信したデータをRoomデータベースライブラリを使用してデータベースに保管し、データベース上のデータを使用して表示を更新する例になります。
ネットワークサービスからの情報取得をコルーチンによって別スレッドで実行することによりネットワークサービスからの応答待ちによるUIの停止を回避するのはネットワークサービスを直接アクセスする場合と同様に実施できます。
なお、このレッスンのサンプルコードは最新のライブラリを参照するように設定すると何らかの不整合が発生するようでコンパイルできなくなります。このため、navigationとroomのライブラリをandroid.archからandroidxに変更して適当なバージョンを指定するだけでなく、開発環境のバージョンによって動作するライブラリバージョンの組み合わせを探す必要があるかもしれません。
2番目の項目「WorkManager」はバックグラウンド動作を管理するWorkManagerを扱います。
WorkManagerはアプリの動作状況にかかわりなく、一度起動されると継続して動作するバックグラウンド処理で、アプリの終了のみでなく、デバイスの再起動があっても継続動作するというある種危険な処理です。
項目では詳しく解説されていませんが、アプリの起動状況にかかわらず動作するということを考えるとWorkManagerで実行する処理は必要最小限にとどめておくのが賢いと思われます。
また、WorkManagerで実行される処理は特定時間経過後1回、または特定時間間隔での繰り返しの2種があり、さらに課金接続時以外などの制約条件を指定することもできます。
制約条件が指定されている場合は条件が解除されたことを検出した時点で待ち合わせている処理が実行され、そこを起点として繰り返し時間間隔が測定されるようです。
例えば1時間間隔での処理が指定されている場合に前の処理実行後に制約が発生して繰り返しができず、前の処理実行から1時間半経ったところで制約が解除されたことが検出されると、そこで処理が1度実行され、その後1時間おきに処理が実行されます。このため、最初に起動された処理タイミングから30分ずれたタイミングでの処理となります。
このため、いつ処理が実行されるかはほぼ予測できないことを前提にする必要もあるかもしれません。
このチュートリアルも次のレッスンで最後になります。
0コメント