Метод removeObserver
Метод removeObserver класса
Lifecycle
отменяет регистрацию, сделанную через
addObserver.
После removeObserver наблюдатель
больше не получит события.
В Compose remove обычно вызывают
в onDispose у DisposableEffect.
Синтаксис
lifecycle.removeObserver(observer)
Параметры
| Параметр | Описание |
|---|---|
observer |
Тот же объект, который передавали в addObserver. |
Пример
Давайте снимем observer при уходе composable:
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.material3.Button
import androidx.compose.material3.Text
import androidx.compose.runtime.DisposableEffect
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleEventObserver
import androidx.lifecycle.compose.LocalLifecycleOwner
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
var show by remember { mutableStateOf(true) }
if (show) {
ObservedLabel()
} else {
Text(text = "abcde")
}
Button(onClick = { show = false }) {
Text(text = "12345")
}
}
}
}
@androidx.compose.runtime.Composable
private fun ObservedLabel() {
val owner = LocalLifecycleOwner.current
var text by remember { mutableStateOf("abcde") }
val observer = remember {
LifecycleEventObserver { _, event ->
if (event == Lifecycle.Event.ON_RESUME) {
text = "12345"
}
}
}
DisposableEffect(owner) {
owner.lifecycle.addObserver(observer)
onDispose {
owner.lifecycle.removeObserver(observer)
}
}
Text(text = text)
}
На экране при скрытии ObservedLabel removeObserver отключит колбэки.
Смотрите также
-
метод
addObserver,
которым вешали observer -
функция
DisposableEffect,
где вызывают removeObserver -
класс
Lifecycle,
с которого снимают наблюдателя -
функция
repeatOnLifecycle,
которая сама управляет подпиской