Lifecycle ライブラリには、Jetpack Compose との統合を可能にする組み込み API が用意されています。主な API は次のとおりです。
- 現在の
Lifecycle.State
のフロー。 LifecycleEffects
: 特定のLifecycle.Event
に基づいてブロックを実行できます。
これらの統合は、Compose 階層内で Lifecycle を管理する便利なフックを提供します。このドキュメントでは、アプリでこれを使用する方法について説明します。
フローでライフサイクルの状態を収集する
Lifecycle は、現在の Lifecycle.State
を Kotlin StateFlow
として提供する currentStateFlow
プロパティを公開します。この Flow
は State
として収集できます。これにより、アプリは作成中に Lifecycle の変更を読み取ることができます。
val lifecycleOwner = LocalLifecycleOwner.current
val stateFlow = lifecycleOwner.lifecycle.currentStateFlow
…
val currentLifecycleState by stateFlow.collectAsState()
上記の例には、lifecycle-common
モジュールを使用してアクセスできます。currentStateAsState()
メソッドは lifecycle-runtime-compose
モジュールで利用できます。これにより、現在のライフサイクルの状態を 1 行で簡単に読み取ることができます。例は次のとおりです。
val lifecycleOwner = LocalLifecycleOwner.current
val currentLifecycleState = lifecycleOwner.lifecycle.currentStateAsState()
ライフサイクル イベントでコードを実行する
また、特定の Lifecycle.Event
が発生したときにブロックを実行できるようにする LifecycleEffects
もあります。
LifecycleEventEffect(Lifecycle.Event.ON_START) {
// do something here
}
LifecycleEventEffect
に加えて、LifecycleStartEffect
と LifecycleResumeEffect
を使用することもできます。これらの API は、特定のイベントに関連付けられています。また、プライマリ ブロック内に追加のブロックがあり、イベントが発生した可能性のあるコードをクリーンアップするのに役立ちます。
LifecycleStartEffect
LifecycleStartEffect
は LifecycleEffect
と似ていますが、Lifecycle.Event.ON_START
イベントでのみ実行されます。また、他の Compose キーと同様に機能するキーも受け入れます。キーが変更されると、ブロックの再実行がトリガーされます。
Lifecycle.Event.ON_STOP
イベントが発生するか、作用がコンポジションを終了すると、onStopOrDispose
ブロックが実行されます。これにより、開始ブロックに含まれていた作業をクリーンアップできます。
LifecycleStartEffect {
// ON_START code is executed here
onStopOrDispose {
// do any needed clean up here
}
}
LifecycleResumeEffect
LifecycleResumeEffect
は LifecycleStartedEffect
と同じように動作しますが、代わりに Lifecycle.Event.ON_RESUME
イベントで実行されます。また、クリーンアップを行う onPauseOrDispose
ブロックも用意されています。
LifecycleResumeEffect {
// ON_RESUME code is executed here
onPauseOrDispose {
// do any needed clean up here
}
}