Не стоит заниматься преждевременной оптимизацией. Пишите UI без оглядки на аннотации стабильности, а затем используйте инструменты анализа, чтобы определить, где действительно возникают лишние рекомпозиции и есть смысл оптимизировать типы.
Как анализировать рекомпозиции и пропуски?
👉 Используйте Layout Inspector в Android Studio (подробнее — в этом посте)
👉 Включайте отслеживание работы composable-функций в System Trace
👉 Можно воспользоваться библиотекой Compose Investigator, чтобы получать детальные логи по рекомпозициям
Если вы используете типы из внешних библиотек или из модулей, где не подключён Compose Compiler, такие типы всегда считаются Unstable. Это может приводить к лишним рекомпозициям.
🚀 Strong Skipping Mode действительно упростил жизнь разработчикам, но старайтесь передавать в параметры Сomposable-функций только Stable или Immutable типы. Это позволит максимально эффективно использовать skipping и сделать UI более производительным.
#compose
Please open Telegram to view this post
VIEW IN TELEGRAM
👍40🤔1
Плюсы решения
👉 Компоненты без стилизации
👉 Поддержка доступности и навигации клавиатурой
👉 Простое API
👉 Одинаковое поведение на всех платформах
👉 Хорошая документация
👉 Все компоненты поддерживают все KMP таргеты Compose
#compose #kmp #composemp #android #ios #desktop #wasm #js
Please open Telegram to view this post
VIEW IN TELEGRAM
👍46❤2
Forwarded from Mobile Compose (Jetpack Compose Bot)
#Video #Compose
Дмитрий Григорьев — Путешествие к центру Композиции
Второй доклад из серии моих "подкапотных разбирательств" с Compose (первый можно посмотреть тут).
На этот раз речь пойдет о Композиции, а в ходе доклада будут рассмотрены такие вопросы как:
▫️Когда и где создается композиция?
▫️Какие структуры данных используются для этого?
▫️Каким именно образом внесенные изменения обновляют дерево Composable-компонентов?
📺 Смотреть доклад 👈
Дмитрий Григорьев — Путешествие к центру Композиции
Второй доклад из серии моих "подкапотных разбирательств" с Compose (первый можно посмотреть тут).
На этот раз речь пойдет о Композиции, а в ходе доклада будут рассмотрены такие вопросы как:
▫️Когда и где создается композиция?
▫️Какие структуры данных используются для этого?
▫️Каким именно образом внесенные изменения обновляют дерево Composable-компонентов?
📺 Смотреть доклад 👈
🔥17👍4
This media is not supported in your browser
VIEW IN TELEGRAM
Приложения с KMP и Compose Multiplatform для Android, iOS, Desktop, Web. Стек: Kotlin Inject, KStore, KotlinX библиотеки, Ktor, Coil, KMP Settings, Compose Desktop JVM Hot Reload
Автор - Константин Цховребов из JB команды KMP.
Скачать можно в Google Play, а вот в App Store не выкладывали.
#compose #kmp #kotlin #пример #android #desktop #ios #web #wasm
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥33
Forwarded from Android Broadcast
🎉 Jetpack Navigation 3 - навигация для Compose, написанная с нуля!
Будем честны Jetpack Navigation for Compose было никаким решением, до того как в ней появилась типобезопасная навигация, но и тогда остается много вопросов. Google решила что пора написать настоящую навигацию для Compose. Знакомьтесь - Jetpack Nav 3
Ключевые идеи в новой библиотеки: декларативное объявление + "навигация как состояние". Это полностью повторяет идеи что я заложил в NavState. Все это вылилось в принципы:
👉 Разработчик управляет back stack
👉 Возможность расширения и реализации собственной навигации на базовых компонентах
👉 Анимации из коробки
👉 Поддержка Predictive Back
👉 Поддержка адаптивных layout
👉 Сохранения состояния каждого элемент back stack, включая ViewModel
👉 Поддержка многомодульности
Пока представлена только первая альфа и библиотеки еще предстоит путь, как минимум обзавестись поддержкой KMP
🔗 Больше подробности в документации
🐱 Примеры использования на GitHub
#jetpack #compose #навигация
Будем честны Jetpack Navigation for Compose было никаким решением, до того как в ней появилась типобезопасная навигация, но и тогда остается много вопросов. Google решила что пора написать настоящую навигацию для Compose. Знакомьтесь - Jetpack Nav 3
Ключевые идеи в новой библиотеки: декларативное объявление + "навигация как состояние". Это полностью повторяет идеи что я заложил в NavState. Все это вылилось в принципы:
👉 Разработчик управляет back stack
👉 Возможность расширения и реализации собственной навигации на базовых компонентах
👉 Анимации из коробки
👉 Поддержка Predictive Back
👉 Поддержка адаптивных layout
👉 Сохранения состояния каждого элемент back stack, включая ViewModel
👉 Поддержка многомодульности
Пока представлена только первая альфа и библиотеки еще предстоит путь, как минимум обзавестись поддержкой KMP
🔗 Больше подробности в документации
#jetpack #compose #навигация
Please open Telegram to view this post
VIEW IN TELEGRAM
1🔥43👍9❤1
Что нового
👉 Compose библиотека с ресурсами теперь может быть собрана как XCFramework (нужен Kotlin 2.2+)
👉 Теперь можно изменить имя генерируемого класса для Compose Resources (Res->)
🛠 Исправление багов
#compose #composemp
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥22
Forwarded from Android Broadcast
Google показала как они снизили лаги UI на Jetpack Compose за 2 года. Тесте проводились на Pixel 3a
В Compose 1.9.0 появятся еще улучшения:
🚀 Приостановка композции
🚀 Фоновая подготовка текста для отображения
🚀 Улучшения предзагрузки в LazyLayout
#compose #производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
2🔥48👍7
В
androidx.compose.material3:material3:1.4.0-alpha10
есть множество новых компонентов следующий дизайн системы Google. Помимо компонентов также доступна новая системная физика для движений компонентов@Composable
fun AndroidifyTheme(
content: @Composable () -> Unit,
) {
val colorScheme = LightColorScheme
MaterialExpressiveTheme(
colorScheme = colorScheme,
typography = Typography,
shapes = shapes,
motionScheme = MotionScheme.expressive(), // задание схемы движений
content = {
SharedTransitionLayout {
CompositionLocalProvider(LocalSharedTransitionScope provides this) {
content()
}
}
},
)
}
Больше примеров найдете в статье, а также можно посмотреть в исходниках нового приложения примера Androidify
#compose #android
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥29🤯6🤔3
Forwarded from Android Broadcast
This media is not supported in your browser
VIEW IN TELEGRAM
#androidstudio #compose
Please open Telegram to view this post
VIEW IN TELEGRAM
👍60🔥32
This media is not supported in your browser
VIEW IN TELEGRAM
Kotlin Playground позволяет писать код с Compose Multiplatform и сразу его проверить (используется Compose Web)
#compose #composemp #web
#compose #composemp #web
🤯76🔥41
Интересная статья с экспериментов как происходит рекомпозиция в зависимости от параметров. влияние лямбд и strong skipping режима работы компилятора.
По итогу автор выводит ряд рекомендаций (зайдите поставьте лайк на Хабре за статью):
#compose #производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
👍27❤9👏2🤯1
Пример реализации виджета тултипа, который должен уметь:
👉 Показываться под якорным элементом в виде облачка
👉 Скрываться согласно нашей кастомной логике
👉 Добавляться в существующие экраны с минимальными затратами
👉 Не блокировать взаимодействие с остальным UI
#compose
Please open Telegram to view this post
VIEW IN TELEGRAM
👍51
Очень подробный разбор в статье (EN) Материал обязателен тем кто пишет свой UI Kit или много собственных компонентов на Compose
#compose #производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
👍28
Почему важно применить? Да потому что в Compose MP по умолчанию используется эффект в лоб от Material, да еще и не в лучшей реализации.
Подробнее про реализацию можно почитать в статье (7м)
#compose #пример
Please open Telegram to view this post
VIEW IN TELEGRAM
👍31❤2
Новая возможность появилась в Compose 1.9.0-alpha04. В release notes рассказывают про "новый кастомизируемый фреймвор теней" 🤯
@Composable
fun DropShadowSample() {
Box(Modifier.size(100.dp, 100.dp)
.dropShadow(RectangleShape, DropShadow(12.dp)))
}
@Composable
fun InnerShadowSample() {
Box(Modifier.size(100.dp, 100.dp)
.innerShadow(RectangleShape, InnerShadow(12.dp)))
}
#compose
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥72👍8🤯5
Самый просто способ обновиться - использовать свейжи BOM файл
// Добавляем в зависимости перед добавлением Compose зависимостей
// и лучше версию зависимостей не указывать вовсе, чтобы они всегда из BOM брались
implementation("androidx.compose:compose-bom-alpha:2025.06.00")
#compose
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14
@Composable
fun AddComponentsToTextContextMenu() {
val textFieldState = rememberTextFieldState()
BasicTextField(
state = textFieldState,
modifier =
Modifier.addTextContextMenuComponents {
separator()
item(key = ClearKeyDataObject, label = "Clear") {
textFieldState.clearText()
close()
}
separator()
}
)
}
#compose
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥29👏8👍5❤1