バージョン情報
plugins { kotlin("jvm") version "1.4.20" id("org.jetbrains.compose") version "0.2.0-build132" }
注釈 0.3.0-build150
CompositionLifecycleObserver
は RememberObserver
に名前が変わりました。
ライフサイクル
ライフサイクルは以下のように購読できます。表示時に onEter
、非表示時に onLeave
が呼ばれます。何かにregisterするわけではないのでわかりにくいですね。
@Composable fun hoge() { remember { object : CompositionLifecycleObserver { override fun onEnter() { } override fun onLeave() { } } } }
Coroutine
Jetpack ComposeでCoroutineが使用したい場合は以下を使用します。
LaunchedEffectImpl
は内部的に CompositionLifecycleObserver
を使用しています。
@Composable @ComposableContract(restartable = false) fun LaunchedEffect( subject: Any?, block: suspend CoroutineScope.() -> Unit ) { val applyContext = currentComposer.applyCoroutineContext remember(subject) { LaunchedEffectImpl(applyContext, block) } }
以下のように使用します。最初の一度だけ実行されます。引数を変更した時は再度実行されます。
val count = remember { mutableStateOf(0) } Column { Button(onClick = { count.value++ }) { Text(text = "Button") } LaunchedEffect(null) { println("LaunchedEffect(null)") } LaunchedEffect(count.value) { println("LaunchedEffect(count)") } }
起動 -> ボタンを3回押したときの出力
LaunchedEffect(null) LaunchedEffect(count) LaunchedEffect(count) LaunchedEffect(count) LaunchedEffect(count)