Skip to main content

JetpackComposeでライフサイクルに応じた処理を実施する

今までActivity/Fragmentの処理をJetpackComposeに移植したい。
そんな時に困るのがライフサイクル
そのやり方


LifecycleEventObserverでコールバックされる
その後DisposableEffectでaddObserverして
onDisposeでremoveOverserverで消す処理をすれば良い。
https://zenn.dev/gottie/articles/5fb92abac732a6

既存の実装に引っ張られてrxjava使うときにたとえば使える

@Composable
fun LifeCycle() {
    var mDisposable = Disposable.disposed()

    val observer = remember {
        LifecycleEventObserver { _, event ->
            when (event) {
                Lifecycle.Event.ON_CREATE -> {}
                Lifecycle.Event.ON_START -> {}
                Lifecycle.Event.ON_RESUME -> {
                    if (!mDisposable.isDisposed) {
                        return@LifecycleEventObserver
                    }

                    AAA().observable
                        .subscribeOn(Schedulers.io())
                        .observeOn(AndroidSchedulers.mainThread())
                        .doOnSubscribe { disposable -> mDisposable = disposable }
                        .subscribe({ flag ->
                            logic()
                        },
                            { mDisposable.dispose() },
                            { mDisposable.dispose() })
                }

                Lifecycle.Event.ON_PAUSE -> {
                    mDisposable.dispose()
                }

                Lifecycle.Event.ON_STOP -> {}
                Lifecycle.Event.ON_DESTROY -> {}

                Lifecycle.Event.ON_ANY -> {}
            }
        }
    }
    val lifecycle = LocalLifecycleOwner.current.lifecycle
    DisposableEffect(Unit) {
        lifecycle.addObserver(observer)
        onDispose {
            lifecycle.removeObserver(observer)
        }
    }
}

関連記事:

Pocket