かこーサーコイ

なんでもいいから書いていこう

Android Architecture Components 勉強会 #5 【個人的なまとめポイント】

GDG Tokyo 主催のAndroid Architecture Components 勉強会 #5に参加しました。

gdg-tokyo.connpass.com

資料

個人的なまとめポイント

普段から仕事でもプライベートでも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にでもあげるかも。