Класс LocalLifecycleOwner
Объект LocalLifecycleOwner -
это CompositionLocal,
который хранит текущего
LifecycleOwner
для composable.
Значение читают через
LocalLifecycleOwner.current.
Его используют
collectAsStateWithLifecycle
и подписки на
Lifecycle
внутри setContent активности.
Синтаксис
val owner = LocalLifecycleOwner.current
Пример
Давайте прочитаем имя текущего State:
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.material3.Text
import androidx.lifecycle.compose.LocalLifecycleOwner
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
val owner = LocalLifecycleOwner.current
val name = owner.lifecycle.currentState.name
Text(text = if (name == "RESUMED") "12345" else "abcde")
}
}
}
На экране при RESUMED будет "12345",
иначе "abcde".
Пример
Давайте передадим lifecycle в repeatOnLifecycle:
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.material3.Text
import androidx.compose.runtime.LaunchedEffect
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.compose.LocalLifecycleOwner
import androidx.lifecycle.repeatOnLifecycle
import kotlinx.coroutines.delay
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
val owner = LocalLifecycleOwner.current
var text by remember { mutableStateOf("abcde") }
LaunchedEffect(owner) {
owner.lifecycle.repeatOnLifecycle(
Lifecycle.State.STARTED,
) {
delay(200)
text = "12345"
}
}
Text(text = text)
}
}
}
На экране текст сменится на "12345",
когда owner из LocalLifecycleOwner активен.
Смотрите также
-
класс
LifecycleOwner,
который хранит LocalLifecycleOwner -
класс
Lifecycle,
к которому обращаются через owner -
функция
collectAsStateWithLifecycle,
которая читает lifecycle из local -
метод
addObserver,
который вызывают на owner.lifecycle