TGViewer
Android Dev Hub Android Dev Hub @androidspb · 71 subscribers
Post #17 99
Оптимизация Jetpack Compose и derivedStateOf

Почему твой derivedStateOf не работает так, как ты думаешь? 🧐

Часто вижу на код-ревью такую конструкцию:

val listState = rememberLazyListState()
val showButton by remember {
derivedStateOf { listState.firstVisibleItemIndex > 0 }
}


Вроде всё ок? Мы экономим рекомпозиции. Но есть нюанс, о котором забывают мидлы.

Если внутри блока derivedStateOf вы обращаетесь к объекту, который не является State-объектом (или Snapshot-aware), магии не произойдет. Compose просто не узнает, что данные изменились, пока не случится рекомпозиция родителя по другой причине.

💡 Кейс из практики: Мы пытались трекать изменение обычного var поля внутри класса, который не был обернут в Stable. В итоге кнопка "Наверх" появлялась рандомно.

Правило большого пальца: Используйте derivedStateOf только когда вы хотите превратить часто меняющийся State (например, скролл пиксель-в-пиксель) в редко меняющийся State (булеан видимости). Если вы просто мапите State A в State B - derivedStateOf часто избыточен и добавляет оверхед на трекинг зависимостей.

#compose #performance #under_the_hood

👉@androidspb
  • 👍 1
More from @androidspb
  1. Dec 10, 2025Пишем простенький DI для Android приложения Сейчас практически любой проект имеет в своём…
  2. Dec 4, 2025Основы AGSL для android разработчика В последние годы интерфейсы приложений становятся все…
  3. Nov 25, 2025LazyTimetable - высокопроизводительная таблица для расписания с отложенной загрузкой для J…
  4. Nov 12, 2025Вложенная прокрутка в Jetpack Compose Вложенная прокрутка в Jetpack Compose позволяет согл…
  5. Nov 7, 2025Как в Duolingo повысили производительность Android-приложения Наша миссия в Duolingo — соз…
  6. Oct 23, 2025Basic Guide to Animation in Jetpack Compose Animations in Jetpack Compose bring life to yo…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →