Lifecycle ライブラリには、Jetpack Compose との統合に使用できる組み込みの API が用意されています。主な API は次のとおりです。
- 現在の
Lifecycle.State向けのフロー。 LifecycleEffects- この API を使用すると、特定のLifecycle.Eventに基づいてブロックを実行できます。
これらの統合により、Compose の階層内で Lifecycle を管理するための便利なフックが提供されます。このドキュメントでは、アプリでこれらの API を使用する方法について説明します。
フローを使ってライフサイクルの状態を収集する
Lifecycle は、現在の Lifecycle.State を Kotlin の StateFlow として提供する currentStateFlow プロパティを公開しています。この Flow を State として収集できます。これにより、アプリはコンポーズ中にライフサイクルの変更を読み取ることができます。
val lifecycleOwner = LocalLifecycleOwner.current
val stateFlow = lifecycleOwner.lifecycle.currentStateFlow
…
val currentLifecycleState by stateFlow.collectAsState()
上記の例には lifecycle-common モジュールを使ってアクセスできます。lifecycle-runtime-compose モジュールには currentStateAsState() メソッドがありますが、このメソッドを使用すると、現在の Lifecycle の状態を 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 イベントが発生したときや、Effect がコンポーズを終了するときに、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
}
}