Slide 1

Slide 1 text

© DMM.com © DMM.com ViewModel SavedState ~ Zli × DMM合同LT ~ 合同会社DMM.com 石井和馬 2020/07/18 ※ がっつりAndroidの話なのですいません

Slide 2

Slide 2 text

© DMM.com - 石井和馬 - 会津大学出身 s123 - 合同会社DMM.com - AQUIZ事業部 - 総合トップ開発部 CDSチーム - https://www.slme.me - twitter: slme_not_found 自己紹介

Slide 3

Slide 3 text

© DMM.com ViewModel Saved State 3

Slide 4

Slide 4 text

© DMM.com 簡単に言うと ViewModelでsavedInstanceStateが扱える (in Android) 4

Slide 5

Slide 5 text

© DMM.com AndroidにおけるViewModelってなに - Android Architecture Componentsで導入されたも の(Jetpackにもある) - ライフサイクルを持っている - 画面が同一の場合、ViewModelを共有できる - 基本的に画面で扱うデータを保持する場所 5

Slide 6

Slide 6 text

© DMM.com savedInstanceStateってなに - 画面が破棄されても一時的にデータを保存できるとこ ろ - onSaveInstanceState で保存 - onCreateなどでgetして復元など - Fragment, Activity(画面)で管理する 6

Slide 7

Slide 7 text

© DMM.com 微妙なところ - ViewModelは画面で扱うデータを保持する部分 - savedInstanceStateはFragment, Activityでしか扱 えない 7 ViewModelでsavedInstanceStateを扱いたいが Fragment, Activityでしか扱えない

Slide 8

Slide 8 text

© DMM.com _人人人人人人人人人人人人人_ > ViewModel SavedState <  ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^ ̄ 8

Slide 9

Slide 9 text

© DMM.com 実際の実装 (with Dagger Hilt) 9

Slide 10

Slide 10 text

© DMM.com Dagger Hiltがない場合 - 独自にViewModelFactoryを作っている場合 - AbstractSavedStateViewModelFactoryを継承する - DaggerがあればAssistedInjectを使ったり - ViewModelFactoryを作ってない場合 - Fragment 1.2.0, Activity 1.1.0以上の場合 - デフォルトで利用可能 - Factoryは引き続き不要 - それ以外 - SavedStateViewModelFactoryを使う 10

Slide 11

Slide 11 text

© DMM.com 内部実装 - SavedStateHandleの内部にMapがある - get, setは内部のMapへのアクセス提供 - onSaveInstanceStateのタイミングで内部に持ってい るMapをsavedInstanceStateに書き込んでいる - onCreateでsavedInstanceStateから読み込み 11

Slide 12

Slide 12 text

© DMM.com 注意事項 (主にsavedInstanceStateの) - 型の制約があるので注意 - https://cs.android.com/androidx/platform/frameworks/support/+/androidx-master-dev:lifecycle/l ifecycle-viewmodel-savedstate/src/main/java/androidx/lifecycle/SavedStateHandle.java;l=370 - 大きいデータの保持は非推奨 (できなくはない) - SystemServerのプロセス (システムプロセス)のメモリを利 用するためメモリ逼迫になりやすくなる 12

Slide 13

Slide 13 text

© DMM.com savedInstanceStateについてもっと知りたい方 13

Slide 14

Slide 14 text

© DMM.com 導入した結果 14

Slide 15

Slide 15 text

© DMM.com 開発速度や保守性 ⤴⤴ 15

Slide 16

Slide 16 text

© DMM.com 参考サイト - https://cs.android.com/androidx - ViewModel の保存済み状態のモジュール | Android デベロッパー - https://medium.com/@pluulove/android-ui%E3%81%AE%E7%8A%B6%E6% 85%8B%E3%81%8C%E3%81%A9%E3%81%AE%E3%82%88%E3%81%86 %E3%81%AB%E4%BF%9D%E5%AD%98-%E5%BE%A9%E5%85%83%E3 %81%95%E3%82%8C%E3%82%8B%E3%81%AE%E3%81%8B-savedstate -d5da6f373b6f - https://gihyo.jp/book/2017/978-4-7741-8861-4 16

Slide 17

Slide 17 text

© DMM.com ご清聴ありがとうございました