無茶振り

9月26日木曜日、晴れ

「最新の Android 環境でのイケてるアプリの作り方」を一時間程度でメンバーに話して、などという無茶ぶりをリーダーにされたのが昨日のこと。
最近調べた ViewModel と LiveData まわりの話をしようと決めて、簡単なサンプルアプリもつくった。これだと15分くらいで終わっちゃうなー…… とおもっていたら、あにはからんや。軽く一時間を超える話になってしまった。

Activity/Fragment の生存期間(startActivity されてから finish するまで)とオブジェクトの生存期間は必ずしも一致しない(というか、むしろ一致することがまれ)という話。
Android では別タスクへの切り替えが(そうは見えないけれど)頻繁に起こる。そして切り替えにより裏に回った Activity は一旦メモリーから削除される可能性がある。
でも Activity/Fragment の生存期間に一致するようビューに表示するデータ(モデル)の生存期間を延ばしてくるのが ViewModel。

この ViewModel に LiveData を持たせる。 LiveData は、いわゆるオブザーバーパターンを構成する仕掛けで、データの変化に関心のあるビューが(オブザーバーを介して)変化の通知を受けられるようにできる。
LiveData がありがたいのは、 onCreate/onResume/onPause/onDestroy といったライフサイクルを理解してくれること。 RESUME 状態にある時に限り通知を送信してくれ、 PAUSE 状態になると通知を停止してくれる。そして PAUSE 期間内に発生した変化を RESUME 状態に戻った時に通知してくれる。そして finish まで行くと自動的に登録解除までしてくれる(これによりメモリーの長期にわたるリークが解消される)。

ViewModel が LiveData をアプリケーションに公開するのだけれど、そのデータの管理は Repository というデータ抽象を使うことを Google は推奨していて……。とかなんとか。

週一くらいでどんどん情報共有してください、と言われたけれど、うーん……。ちょっと荷が重いかなー。

* * *

『夢をみる島』2周目でなくて、積んでしまっていた『ヒューマン・リソース・マシン』を引っ張り出す。たのしい。

* * *

Switch Lite でダウンロードゲームを遊ぼうとすると「ソフトを遊べるかチェックしています」とネットワーク接続を要求される。外に持って出かける端末で(SIM が刺さらないので自前ではオンラインになれないのに)ネット接続を要求するとは、これいかに。

このチェックは、「いつもあそぶ本体」に設定すると走らなくなるみたい。

ただし「いつもあそぶ本体」に設定できるのは一台のみ。そして設定していない端末ではネットワーク接続が必要になる。その上、ダウンロード版ソフトを遊べるのは本人だけという制限がかかる。

つまり。

外に持ってでかける Lite を「いつもあそぶ本体」にすると、家に置いておくテレビに接続して遊ぶ Switch では家族がダウンロード版ソフトを遊べなくなる。

これって大いなる矛盾ではないか?

この記事が気に入ったらサポートをしてみませんか?