はじめに
ActivityやFragmentでは、onPauseやonResume等の関数をオーバーライドしてあげれば、Androidのライフサイクルで発火するイベントを設定できます。
Composeで作った画面でもAndroidのライフサイクルを監視してイベント発火するに「LifecycleEventObserver」を使って設定可能なようです。
今回はComposeでAndroidのライフサイクルであるON_PAUSEを監視し、イベントを設定する方法をまとめていきたいと思います。
ComposeでON_PAUSEで発火するイベントを設定する
サンプルコードは以下になります。
sample.kt
@Composable
fun MyComposable() {
// Composeが所属するライフサイクルオーナ-を取得
val lifecycleOwner = LocalLifecycleOwner.current
// DisposableEffectを使用して副作用を設定
DisposableEffect(lifecycleOwner) {
// EventObserverを設定し、ライフサイクルのイベントを監視・イベントを設定
val observer = LifecycleEventObserver { _, event ->
if (event == Lifecycle.Event.ON_PAUSE ) {
// ここにON_PAUSEで発火するイベントを設定
}
}
// 作成した監視・イベントの設定をライフサイクルオーナーに紐付ける
lifecycleOwner.lifecycle.addObserver(observer)
// ライフサイクルオーナーが変化した時、または、Composeが破棄される時に、紐付けたイベントを解除する
onDispose {
lifecycleOwner.lifecycle.removeObserver(observer)
}
}
}
ポイントは、DisposableEffectのキーとしてlifecycleOwnerを指定している点になります。
キーにlifecycleOwnerを指定することで、ライフサイクルの再生成(Acitivityの再生成)があれば再度中身の処理を実行するようになります。
今回は中身の処理で監視・イベントの定義、ライフサイクルへの紐付けを行っているため、ライフサイクルが再生成されたら、新しいライフサイクルへ監視・イベントを紐付けるように動かすようになっています。
また、onDisposeとしてライフサイクルオーナーからイベントを削除するクリーンアップ処理を書いているので、
不要なイベントを解放してメモリリークに繋がらないようにしています。