Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ViewModel SavedState

9170344325d8c88e2d77ab50c9b5d6a6?s=47 slme
July 18, 2020

ViewModel SavedState

9170344325d8c88e2d77ab50c9b5d6a6?s=128

slme

July 18, 2020
Tweet

More Decks by slme

Other Decks in Technology

Transcript

  1. © DMM.com © DMM.com ViewModel SavedState ~ Zli × DMM合同LT

    ~ 合同会社DMM.com 石井和馬 2020/07/18 ※ がっつりAndroidの話なのですいません
  2. © DMM.com - 石井和馬 - 会津大学出身 s123 - 合同会社DMM.com -

    AQUIZ事業部 - 総合トップ開発部 CDSチーム - https://www.slme.me - twitter: slme_not_found 自己紹介
  3. © DMM.com ViewModel Saved State 3

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

  5. © DMM.com AndroidにおけるViewModelってなに - Android Architecture Componentsで導入されたも の(Jetpackにもある) - ライフサイクルを持っている

    - 画面が同一の場合、ViewModelを共有できる - 基本的に画面で扱うデータを保持する場所 5
  6. © DMM.com savedInstanceStateってなに - 画面が破棄されても一時的にデータを保存できるとこ ろ - onSaveInstanceState で保存 -

    onCreateなどでgetして復元など - Fragment, Activity(画面)で管理する 6
  7. © DMM.com 微妙なところ - ViewModelは画面で扱うデータを保持する部分 - savedInstanceStateはFragment, Activityでしか扱 えない 7

    ViewModelでsavedInstanceStateを扱いたいが Fragment, Activityでしか扱えない
  8. © DMM.com _人人人人人人人人人人人人人_ > ViewModel SavedState <  ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^ ̄ 8

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

  10. © DMM.com Dagger Hiltがない場合 - 独自にViewModelFactoryを作っている場合 - AbstractSavedStateViewModelFactoryを継承する - DaggerがあればAssistedInjectを使ったり

    - ViewModelFactoryを作ってない場合 - Fragment 1.2.0, Activity 1.1.0以上の場合 - デフォルトで利用可能 - Factoryは引き続き不要 - それ以外 - SavedStateViewModelFactoryを使う 10
  11. © DMM.com 内部実装 - SavedStateHandleの内部にMapがある - get, setは内部のMapへのアクセス提供 - onSaveInstanceStateのタイミングで内部に持ってい

    るMapをsavedInstanceStateに書き込んでいる - onCreateでsavedInstanceStateから読み込み 11
  12. © 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
  13. © DMM.com savedInstanceStateについてもっと知りたい方 13

  14. © DMM.com 導入した結果 14

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

  16. © 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
  17. © DMM.com ご清聴ありがとうございました