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

Dec 01 2022
Jetpack Compose — это современный инструментарий пользовательского интерфейса для Android. представляет собой декларативный пользовательский интерфейс, который заменяет императивный (xml).

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, и т. д.), то перекомпоновки не произойдет.

так как же тогда преобразовать эти стабильные типы в такой тип, который может привести к перекомпоновке?

ну, согласно официальным документам :

Составные функции могут использовать rememberAPI для хранения объекта в памяти. Значение, вычисленное с помощью 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

Спасибо за чтение :)

ссылки :