0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Android】ComposeでON_PAUSEで発火するイベントを設定する

Posted at

はじめに

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としてライフサイクルオーナーからイベントを削除するクリーンアップ処理を書いているので、
不要なイベントを解放してメモリリークに繋がらないようにしています。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?