概要
lifecycle 2.7.0がリリースされています。
https://developer.android.com/jetpack/androidx/releases/lifecycle#2.7.0
ChatGPTにお願いした更新内容の要約は次の通りです。
-
TestLifecycleOwner
に、状態変更とLifecycleObserverコールバック完了のためのサスペンド機能setCurrentState()
が追加されました。 - LiveData拡張の
map
とswitchMap
は、distinctUntilChanged
のように振る舞い、LiveDataの値を即座に設定するようになりました。 -
SavedStateHandle
でカスタムParcelableクラスがプロセスの死後に正しく復元されるよう修正されました。 - LifecycleObserverに関連するProGuardの保持ルールが削除されました。
- Jetpack ComposeとFlowで
Lifecycle.Event
とLifecycle.State
を観察する新機能が追加されました。
LifecycleとComposeのIntegrate
ComposeでLifecycleに応じた処理を書きやすくするComposableが追加されています。
- LifecycleEventEffect
- LifecycleStartEffect
- LifecycleResumeEffect
- 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()