Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
ViewModel SavedState
Search
slme
July 18, 2020
Technology
150
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
ViewModel SavedState
slme
July 18, 2020
More Decks by slme
See All by slme
Kotlin Serializationことはじめ
slme
1
1.1k
EXIA.pdf
slme
0
160
Other Decks in Technology
See All in Technology
AIで仕事のやり方を変える
matsu7874
3
1k
多層防御と最⼩権限で実現する、安全なAIエージェント設計パターン
lycorptech_jp
PRO
1
220
Redmine 7.0で私が開発した新機能の狙いと背景
vividtone
1
120
Snowflakeのコスト最適化を支えるアーキテクチャ設計
ktatsuya
0
860
GoCon2026 - Open Source, Open World
sanposhiho
2
550
PfEingのアプローチで働こう
rindrics
0
200
DEFCON34-Write-up_HYCu-MYCu
daikiokazaki
0
100
module Synths; end
asonas
1
130
Benchmarking Vector Databases: pgvector vs. LanceDB
tsho
0
150
#jawssonic2026 あの時代が悪かった ~動かなかったSageMakerと共に迎えたイベント当日~
ktkn1129
0
140
プロダクトエンジニアに必要な「いい感じ」に作る能力 〜たくさん作れる時代に、どこまで作るかの決め方〜
jnishime_dresscode
2
1.4k
AI時代に、プロダクトの数だけ積み上がる所有コストをどうエンジニアリングするか / Engineering the Cost of Ownership
kzkmaeda
1
1.1k
Featured
See All Featured
The Curious Case for Waylosing
cassininazir
1
500
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
1k
A designer walks into a library…
pauljervisheath
211
25k
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
510
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.9k
Producing Creativity
orderedlist
PRO
348
41k
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
260
Designing for humans not robots
tammielis
254
26k
Building Applications with DynamoDB
mza
96
7.2k
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
1
890
Faster Mobile Websites
deanohume
310
32k
Writing Fast Ruby
sferik
630
63k
Transcript
© DMM.com © DMM.com ViewModel SavedState ~ Zli × DMM合同LT
~ 合同会社DMM.com 石井和馬 2020/07/18 ※ がっつりAndroidの話なのですいません
© DMM.com - 石井和馬 - 会津大学出身 s123 - 合同会社DMM.com -
AQUIZ事業部 - 総合トップ開発部 CDSチーム - https://www.slme.me - twitter: slme_not_found 自己紹介
© DMM.com ViewModel Saved State 3
© DMM.com 簡単に言うと ViewModelでsavedInstanceStateが扱える (in Android) 4
© DMM.com AndroidにおけるViewModelってなに - Android Architecture Componentsで導入されたも の(Jetpackにもある) - ライフサイクルを持っている
- 画面が同一の場合、ViewModelを共有できる - 基本的に画面で扱うデータを保持する場所 5
© DMM.com savedInstanceStateってなに - 画面が破棄されても一時的にデータを保存できるとこ ろ - onSaveInstanceState で保存 -
onCreateなどでgetして復元など - Fragment, Activity(画面)で管理する 6
© DMM.com 微妙なところ - ViewModelは画面で扱うデータを保持する部分 - savedInstanceStateはFragment, Activityでしか扱 えない 7
ViewModelでsavedInstanceStateを扱いたいが Fragment, Activityでしか扱えない
© DMM.com _人人人人人人人人人人人人人_ > ViewModel SavedState <  ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^ ̄ 8
© DMM.com 実際の実装 (with Dagger Hilt) 9
© DMM.com Dagger Hiltがない場合 - 独自にViewModelFactoryを作っている場合 - AbstractSavedStateViewModelFactoryを継承する - DaggerがあればAssistedInjectを使ったり
- ViewModelFactoryを作ってない場合 - Fragment 1.2.0, Activity 1.1.0以上の場合 - デフォルトで利用可能 - Factoryは引き続き不要 - それ以外 - SavedStateViewModelFactoryを使う 10
© DMM.com 内部実装 - SavedStateHandleの内部にMapがある - get, setは内部のMapへのアクセス提供 - onSaveInstanceStateのタイミングで内部に持ってい
るMapをsavedInstanceStateに書き込んでいる - onCreateでsavedInstanceStateから読み込み 11
© 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
© DMM.com savedInstanceStateについてもっと知りたい方 13
© DMM.com 導入した結果 14
© DMM.com 開発速度や保守性 ⤴⤴ 15
© 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
© DMM.com ご清聴ありがとうございました