GDG Tokyo 主催のAndroid Architecture Components 勉強会 #5に参加しました。
資料
個人的なまとめポイント
普段から仕事でもプライベートでもLiveData,ViewModelは使用しており、LifeCycleはそこまで活用しきれてない状況での参加でした。 今回初めて知ったこともあり「へ〜」と思ったことを中心にまとめます。
LifeCycle
LifecycleObserver
- @OnLifecycleEventをつけると指定したイベントが発行された時に呼ばれる
val observer = object : LifecycleObserver { @OnLifecycleEvent(Lifecycle.Event.ON_START) fun onStart(source: LifecycleOwner) { println("onStart : ${source.lifecycle.currentState.name}") } }
ProcessLifecycleOwner
- ProcessLifecycleOwner を使えば、アプリのフォアグラウンド/バックグラウンドが簡単に判定できる(便利)
ProcessLifecycleOwner.get()
.lifecycle
.addObserver(lifecycleObserver)
LiveData
active/inactive
active
- アクティブなObserverが1つ以上の時呼ばれる
inactive
- アクティブなObserverが1つ未満の時呼ばれる
MediatorLiveData
- 複数のLiveDataを重ねて管理できる
Transformation
- MediatorLiveDataを使いやすくしたユースリティ
- 中でMediatorLiveDataを呼んでいる(知らなかった。。)
ViewModel
- プロセス停止後は復旧できない
- ViewModeはプロセス停止後は復旧できない。 アプリをバックグラウンドしてゲームなどやっている間にアプリがプロセス終了した後に復帰しても戻らない
- ↑これをどうにかしたいって開発がalphaだけど始まっている
- Saved State module for ViewModel : https://developer.android.com/topic/libraries/architecture/viewmodel-savedstate
インスタンス化
- ViewModelProvidersを使う
kotlin
val viewModel = ViewModelProviders.of(this).get(MainViewModel::class.java)
普段はDIライブラリを使うことがほとんどなのでこの書き方は実際には使わないかも。 Koinを使用しているので
val viewModel : MainViewModel by viewModel() val shareViewModel : ShareViewModel by shareViewModel()
って書いています。おすすめ。
KTX-LiveData
- いままでktxはviewmodelだけだったが、LiveDataも登場した。(alpha)
ViewModel.viewModelScope
- CoroutineScopeをサポートする
課題
結構多かったですが、課題15まではときました。 課題16は間に合わなかったですが、あとでトライしてみます。 後ほどgithubにでもあげるかも。