LoginSignup
5
2

lifecycle 2.7.0についてのメモ

Posted at

概要

lifecycle 2.7.0がリリースされています。
https://developer.android.com/jetpack/androidx/releases/lifecycle#2.7.0

ChatGPTにお願いした更新内容の要約は次の通りです。

  1. TestLifecycleOwnerに、状態変更とLifecycleObserverコールバック完了のためのサスペンド機能setCurrentState()が追加されました。
  2. LiveData拡張のmapswitchMapは、distinctUntilChangedのように振る舞い、LiveDataの値を即座に設定するようになりました。
  3. SavedStateHandleでカスタムParcelableクラスがプロセスの死後に正しく復元されるよう修正されました。
  4. LifecycleObserverに関連するProGuardの保持ルールが削除されました。
  5. Jetpack ComposeとFlowでLifecycle.EventLifecycle.Stateを観察する新機能が追加されました。

LifecycleとComposeのIntegrate

ComposeでLifecycleに応じた処理を書きやすくするComposableが追加されています。

  1. LifecycleEventEffect
  2. LifecycleStartEffect
  3. LifecycleResumeEffect
  4. Collect lifecycle state with flows

ドキュメントも新しく用意されていました。
https://developer.android.com/topic/libraries/architecture/compose

LifecycleEventEffectの例

LifecycleEventEffectの例。onResumeのタイミングでviewModelのメソッドを叩いています。
今までlifecycle ownerを取得して監視するコードを書いたりしてましたが、簡単に書けます。
Activity/Fragmentに書いていたLifecycleに応じたコードもComposeに移せますね。

@Composable
fun HomeScreen(viewModel: HomeViewModel = viewModel()) {
  LifecycleEventEffect(Lifecycle.Event.ON_RESUME) {
    viewModel.refreshData()
  }
  // …
}

LifecycleStartEffectの例

こちらはLifecycleStartEffectの例。

fun HomeScreen(viewModel: HomeViewModel = viewModel()) {
  LifecycleStartEffect(viewModel) {
    val timeTracking = viewModel.startTrackingTimeOnScreen()
    onPauseOrDispose {
      timeTracking.stopTrackingTimeOnScreen()
    }
}

Collect lifecycle state with flows

「Collect lifecycle state with flows」ということで、Lifecycleの状態をStateFlowとして購読できるようになっています。

val lifecycleOwner = LocalLifecycleOwner.current
val currentLifecycleState = lifecycleOwner.lifecycle.currentStateAsState()

関連資料

5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2