Класс Lifecycle
Класс Lifecycle хранит текущий этап
State
и список наблюдателей.
Владелец цикла реализует
LifecycleOwner
и отдаёт lifecycle.
Подписаться помогают методы
addObserver
и removeObserver.
Синтаксис
val lifecycle = owner.lifecycle
Методы
| Метод | Описание |
|---|---|
addObserver |
Вешает наблюдателя на события цикла. |
removeObserver |
Снимает ранее добавленного наблюдателя. |
Пример
Давайте сменим текст при ON_RESUME:
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.material3.Text
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
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
var text by remember { mutableStateOf("abcde") }
val observer = remember {
LifecycleEventObserver { _, event ->
if (event == Lifecycle.Event.ON_RESUME) {
text = "12345"
}
}
}
DisposableEffectForLifecycle(
lifecycle = lifecycle,
observer = observer,
)
Text(text = text)
}
}
}
@androidx.compose.runtime.Composable
private fun DisposableEffectForLifecycle(
lifecycle: Lifecycle,
observer: LifecycleEventObserver,
) {
androidx.compose.runtime.DisposableEffect(lifecycle) {
lifecycle.addObserver(observer)
onDispose { lifecycle.removeObserver(observer) }
}
}
На экране после resume активности
текст станет "12345".
Смотрите также
-
перечисление
State,
которым описывают этап Lifecycle -
класс
LifecycleOwner,
который владеет объектом Lifecycle -
класс
DefaultLifecycleObserver,
с готовыми колбэками onStart и onResume -
функция
repeatOnLifecycle,
которая запускает блок на нужном этапе