Что такое лишняя рекомпозиция?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Что такое лишняя рекомпозиция?
Лишняя (ненужная) рекомпозиция — это повторное выполнение функции Composable, которое не приводит к видимым изменениям на экране. Это одна из основных причин деградации производительности в Jetpack Compose.
Когда происходит рекомпозиция?
Rekompozitsiya запускается когда:
- Изменяется состояние (State), от которого зависит Composable
- Изменяется внешний @Stable параметр
- Родительский Composable перерисовывается
Примеры лишней рекомпозиции
Плохо — создаём новый объект при каждой рекомпозиции:
@Composable
fun UserCard(name: String) {
val userData = Data(name)
Text(name)
}
Хорошо — создаём объект только когда name меняется:
@Composable
fun UserCard(name: String) {
val userData = remember(name) { Data(name) }
Text(name)
}
Проблемы лишней рекомпозиции
- Снижение производительности: лишние вычисления потребляют CPU
- Избыточное использование памяти: промежуточные объекты не удаляются
- Батарея садится быстрее: телефон работает интенсивнее
- UI могут подтормаживать: особенно на слабых устройствах
Как предотвратить лишнюю рекомпозицию?
1. Используй remember() для стабилизации объектов:
@Composable
fun Counter() {
var count by remember { mutableStateOf(0) }
Button(onClick = { count++ })
}
2. Используй @Stable и @Immutable аннотации:
@Immutable
data class User(val id: Int, val name: String)
@Composable
fun ShowUser(user: User) {
// не вызовет рекомпозицию если значение не изменилось
}
3. Выноси состояние вверх (State Hoisting):
@Composable
fun UserList() {
var selectedId by remember { mutableStateOf(-1) }
LazyColumn {
items(users) { user ->
UserItem(user, selectedId)
}
}
}
4. Используй key() для управления идентификацией:
LazyColumn {
items(users, key = { it.id }) { user ->
UserCard(user)
}
}
5. Разделяй Composable на мелкие компоненты:
@Composable
fun UserProfile(userId: Int) {
var isExpanded by remember { mutableStateOf(false) }
Column {
UserHeader(userId)
if (isExpanded) UserDetails(userId)
}
}
Инструменты для отладки
- Compose Compiler Reports — показывает какие Composable рекомпилируются
- Android Profiler — мониторит CPU, память, GPU
- Layout Inspector — визуализирует иерархию компонентов
Получение лишней рекомпозиции — частый источник проблем с производительностью, поэтому важно о ней знать и уметь предотвращать.