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
}
}