今まで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)
}
}
}