Жизненный цикл компонуемой функции

Jetpack Compose — это современный инструментарий пользовательского интерфейса для Android. представляет собой декларативный пользовательский интерфейс, который заменяет императивный (xml).
классическим способом, который вы используете для обработки многих жизненных циклов действий или фрагментов ( onStart , onCreate , onResume … и т. д.)
согласно официальным документам :
Жизненный цикл компонуемого определяется следующими событиями: вход в композицию, перекомпоновка 0 или более раз и выход из композиции.
поэтому у нас есть три события:
I. Введите состав
II. Получение перекомпоновки N раз
III. уход состав
Композиция может быть создана только из первоначальной композиции и обновлена путем рекомпозиции . Единственный способ изменить композицию — перекомпоновать .
Например:
@Composable
fun MoviesScreen(movies: List<Movie>) {
Column {
for (movie in movies) {
key(movie.id) { // Unique ID for this movie
MovieOverview(movie)
}
}
}
}
в противном случае нам придется обрабатывать перекомпоновку без необходимости вызова функции.
Если компонуемый объект уже находится в композиции, он может пропустить рекомпозицию, если все входные данные стабильны и не изменились.
так как сделать рекомпозицию?
recompositon зависит от типа составных функциональных переменных
если переменные относятся к стабильным типам (( Boolean
, Int
, Long
, Float
, Char
, и т. д.), то перекомпоновки не произойдет.
так как же тогда преобразовать эти стабильные типы в такой тип, который может привести к перекомпоновке?
ну, согласно официальным документам :
Составные функции могут использовать remember
API для хранения объекта в памяти. Значение, вычисленное с помощью remember
, сохраняется в композиции во время первоначальной композиции, а сохраненное значение возвращается во время повторной композиции. remember
может использоваться для хранения как изменяемых, так и неизменяемых объектов.
поэтому мы должны использовать интерфейс MutableState<T> , чтобы добавить изменчивость в нашу функцию компоновки, чтобы рекомпозиция происходила каждый раз, когда значение этого типа изменяется.
класс MutableState<T> , если тип State<T>
interface MutableState<T> : State<T> {
override var value: T
}
мутаблестатеоф
var list by remeber{mutableStateOf(initialValue)}
or
val list = remember { mutableStateOf(initialValue) } // val variable will not change
import androidx.compose.runtime.getValue
import androidx.compose.runtime.setValue
list.value = ….
существуют и другие типы состояний, отличные от State<T> или MutableState<T> , compose также поддерживает следующее:
- LiveData
- Поток
- RxJava2
Спасибо за чтение :)
ссылки :