#compose #производительность #androidstudio
Please open Telegram to view this post
VIEW IN TELEGRAM
👍48🔥7❤5
⚙️ Compose Stability Analyzer включает в себя плагин компилятора, который в рантайме позволяет в логах видеть информацию по рекомпозиции функций. Работает с Kotlin Multiplatform
#compose #производительность #kmp #cmp
@TraceRecomposition
fun MyComposable(...) { ... }
#compose #производительность #kmp #cmp
👍23🔥5❤1
С выходом Kotlin 2.3.0 (на момент написания поста вышла Beta 2) компилятор Compose начал генерировать mapping файлы для стектрейсов Composable функций — теперь даже если ваше приложение минифицировано R8, вы сможете понять, где именно упала композиция.
Раньше подробные стектрейсы были доступны только в debuggable сборках из-за того что информация не затиралась. Теперь же появился новый режим —
Group Keys, который позволяет связать анонимные функции из минифицированного кода с исходными @Composable без необходимости хранить пути к файлам.Чтобы включить этот режим, добавьте строку до инициализации любого контента Compose (лучше всего в рутовой функции):
Composer.setDiagnosticStackTraceMode(ComposeStackTraceMode.GroupKeys)
После этого при падениях во время composition / measure / draw Compose сам добавит свой стектрейс — даже в релизных сборках 🔥
Для работы требуется:
Если же увидите новые предупреждения или недостаток информации — Google просит репортить их в Issue Tracker.
#compose #kotlin #android #r8
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥26👍3❤2
// Пример использования
WheelPicker(
state = state,
bufferSize = 3,
window = { ... },
) { index ->
Text(
"Item ${index + 1}",
Modifier.padding(16.dp, 8.dp),
)
}
#compose #cmp #ios
Please open Telegram to view this post
VIEW IN TELEGRAM
❤12👍3🤯1
🔗 Альтернативная ссылка
#compose #ios #ios26
Please open Telegram to view this post
VIEW IN TELEGRAM
🤯32👍13🔥2👏1
Тех стек:
👉 Многомодульная архитектура
👉 Metro DI
👉 Coil для показа картинок
👉 Kotlin Coroutines и SerlializationX
👉 Ktor
👉 Jetpack Room
#compose #cmp #kmp #android #ios #desktop #пример #opensource
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍23🔥6❤3
Обновляйте зависимости или сразу всё через BOM файл:
dependencies {
implementation(
platform("androidx.compose:compose-bom-beta:2025.11.00")
)
}#compose #android
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
Text(
text = "Solid Shadow",
modifier = Modifier
.shadowGlow(
color = Color.Black.copy(alpha = 0.5f),
borderRadius = 8.dp,
blurRadius = 10.dp,
offsetX = 4.dp,
offsetY = 4.dp
)
.background(Color.White)
.padding(16.dp)
)
#compose #android
Please open Telegram to view this post
VIEW IN TELEGRAM
👍33
Что нового:
Compose iOS
👉 Прокачали работу с софт клавиатурой
Compose Desktop:
👉 Compose Hot Reload теперь теперь часть Compose. Больше не нужна отдельная зависимость
👉 SwingPanel теперь автоматически подстраивает свой размер на основе размеров контента в ней
Gradle плагин:
👉 Алиасы для Compose зависимостей в Gradle теперь не рекомендуютя к использованию. Подключаем артефакты как и все другие
👉 Поддержка Android Gradle Plugin 9.0.0
#compose #cmp #gradle #ios #desktop
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21🔥2👏1
🤯 Liquid Glass в iOS 26 — удар по кроссплатформенным UI: Compose и Flutter
В iOS 26 Apple полностью обновила визуальный язык всех своих систем — от iPhone до Mac — на основе эффекта Liquid Glass.
Это не просто редизайн: весь интерфейс теперь основан на динамическом материале, который выглядит как живое стекло — с прозрачностью, преломлением, отражениями и адаптацией к фону и движению.
🧩 Всё это работает на уровне системного UI-стека, а не через отдельные шейдеры в приложении.
Apple интегрировала эффект прямо в UIKit и SwiftUI — стандартные контролы (панели, навигация, вкладки, кнопки и т.д.) автоматически наследуют материал без изменений в коде.
Для кастомных интерфейсов появились обновлённые API, управляющие степенью «стеклянности» и размытия.
Рендеринг выполняется через Metal с аппаратным ускорением и оптимизацией под энергопотребление.
⚙️ Compose Multiplatform и Flutter рендерят интерфейс поверх собственного движка — Skia и Impeller соотвественно, который полностью берёт на себя отрисовку.
Это значит, что системные визуальные эффекты, вроде динамического стекла, не будут работать «из коробки».
Возможна имитация Liquid Glass силами движка, но тогда нужно в реальном времени искажать фон под элементом — а это серьёзная нагрузка на CPU/GPU и батарею.
😯 На iOS Skia действительно работает поверх Metal, но использует лишь его базовый 2D-функционал, без доступа к системным шейдерам, материалам и эффектам среды.
Теоретически Skia может эволюционировать в эту сторону, но пока она изолирована от системного рендеринга.
🤖 На Android у Jetpack Compose ситуация лучше: он использует не отдельный движок, а системный рендер Android View, поэтому интеграция системных эффектов возможна нативно.
На iOS же для Compose Multiplatform всё зависит от будущих решений JetBrains — если появится рендер поверх UIKit/Metal, тогда можно будет подключать нативные материалы.
Пока же оптимальный вариант — использовать SwiftUI для UI и KMP-модули для бизнес-логики.
🎯 Apple подняла планку того, что значит «feels like native».
Теперь визуальное и интерактивное поведение невозможно подделать одной лишь кастомной отрисовкой — нужна полная интеграция с системным стеком.
#apple #ios #compose #flutter
В iOS 26 Apple полностью обновила визуальный язык всех своих систем — от iPhone до Mac — на основе эффекта Liquid Glass.
Это не просто редизайн: весь интерфейс теперь основан на динамическом материале, который выглядит как живое стекло — с прозрачностью, преломлением, отражениями и адаптацией к фону и движению.
🧩 Всё это работает на уровне системного UI-стека, а не через отдельные шейдеры в приложении.
Apple интегрировала эффект прямо в UIKit и SwiftUI — стандартные контролы (панели, навигация, вкладки, кнопки и т.д.) автоматически наследуют материал без изменений в коде.
Для кастомных интерфейсов появились обновлённые API, управляющие степенью «стеклянности» и размытия.
Рендеринг выполняется через Metal с аппаратным ускорением и оптимизацией под энергопотребление.
Это значит, что системные визуальные эффекты, вроде динамического стекла, не будут работать «из коробки».
Возможна имитация Liquid Glass силами движка, но тогда нужно в реальном времени искажать фон под элементом — а это серьёзная нагрузка на CPU/GPU и батарею.
😯 На iOS Skia действительно работает поверх Metal, но использует лишь его базовый 2D-функционал, без доступа к системным шейдерам, материалам и эффектам среды.
Теоретически Skia может эволюционировать в эту сторону, но пока она изолирована от системного рендеринга.
На iOS же для Compose Multiplatform всё зависит от будущих решений JetBrains — если появится рендер поверх UIKit/Metal, тогда можно будет подключать нативные материалы.
Пока же оптимальный вариант — использовать SwiftUI для UI и KMP-модули для бизнес-логики.
🎯 Apple подняла планку того, что значит «feels like native».
Теперь визуальное и интерактивное поведение невозможно подделать одной лишь кастомной отрисовкой — нужна полная интеграция с системным стеком.
#apple #ios #compose #flutter
Please open Telegram to view this post
VIEW IN TELEGRAM
🤯33👍12❤1🔥1🤔1
Это изменение позволяет использовать нативные UIView из iOS с прозрачным фоном и использовать все нативные шейдеры! Но это все также встраивание элементов из нативного механизма отрисовки в Compose, аналогично как это есть для Android и Swing компонентов в iOS.
Фактически для Compose Button сделать liquid glass эффект не получится сделать. Для этого надо делать обертку на стандартным компонентов из iOS.
Спасибо @nek_12 за подсвечивание момента
#compose #ios26
Please open Telegram to view this post
VIEW IN TELEGRAM
👍31❤2🤔1
Media is too big
VIEW IN TELEGRAM
Compose позволяет разрабатывать под все актуальные Android платформы, повышая удобство и скорость реализации. Подробности в докладе от Google
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13❤3🤔1
В Compose есть возможность настраивать размер кэша для lazy layouts! Можно контролировать, сколько элементов сохранять до и после видимой области.
Что изменилось?
👉 До версии 1.9: Lazy списки компилировали только 1 элемент вперед и сразу удаляли невидимые
👉 С версии 1.9: Можно задать точное количество сохраняемых элементов в dp или % viewport
Зачем это нужно?
✅ Увеличивает плавность прокрутки за счет подготовки контента заранее
✅ Оптимизирует использование pausable composition между кадрами
✅ Позволяет балансировать между памятью и производительностью
Как использовать:
// Кэш в dp
val dpCacheWindow = LazyLayoutCacheWindow(
ahead = 150.dp, // 150dp вперед
behind = 100.dp // 100dp назад
)
// Или в процентах от viewport
val percentCacheWindow = LazyLayoutCacheWindow(
ahead = 0.5f, // 50% viewport вперед
behind = 0.3f // 30% viewport назад
)
val state = rememberLazyListState(cacheWindow = dpCacheWindow)
LazyColumn(state = state) {
// ваш контент
}
Рекомендации:
🎯 Начинайте с 50% viewport и тестируйте производительность
🎯 Для тяжелых элементов используйте больший кэш
🎯 Для легких списков можно уменьшить значения
Особенно полезно для сложных списков с изображениями, анимациями или тяжелой бизнес-логикой!
#Compose #Производительность #cmp
Please open Telegram to view this post
VIEW IN TELEGRAM
❤42👍15🔥3
Традиционно измерение и кэширование текста происходит на UI-потоке, что для длинных текстов может создавать задержки. Начиная с версии 1.9, Compose позволяет вынести эти операции в фоновый поток. Для View уже давно была такая возможность, а вот на Compose ждали.
Как это работает на практике:
val textMeasurementExecutor = Executors.newSingleThreadExecutor()
CompositionLocalProvider(
LocalBackgroundTextMeasurementExecutor provides DefaultTextMeasurementExecutor
) {
// Весь текст внутри будет предзагружаться в фоне
Column {
Text("Заголовок")
Text("Длинный описательный текст...")
AnnotatedString("Форматированный текст")
}
}
Ключевые преимущества:
- Ускорение layout — предзаполнение word-cache происходит заранее
- Разгрузка UI-потока — тяжелые операции с текстом уходят в фон
- Особенно эффективно в списках (LazyColumn/LazyRow) с текстовым контентом
- Работает с любыми текстовыми компонентами — BasicText, Text, AnnotatedString
Когда стоит применять:
- Приложения с большими объемами текста (читалки, новости, документация)
- Списки с множеством текстовых элементов
- Сложные текстовые интерфейсы с форматированием
❗️Важный нюанс: Результаты могут варьироваться в зависимости от контента, поэтому всегда тестируйте производительность до и после внедрения.
Уже используете эту возможность? Делитесь результатами в комментариях!
#Compose #Android
Please open Telegram to view this post
VIEW IN TELEGRAM
❤28👍9🔥3
This media is not supported in your browser
VIEW IN TELEGRAM
Чистая архитектура — это фундамент для масштабируемых Android-приложений. 26 ноября в 20:00 мск на открытом занятии вы самостоятельно соберёте клиент-серверное приложение с нуля и поймёте, как проектировать код, который легко поддерживать и развивать.
На вебинаре вы:
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Google представила Navigation 3 — совершенно новую библиотеку для навигации в Compose, где управление стеком экранов сводится к простым операциям с списком.
Хорошая новость: JetBrains уже адаптировали её для Compose Multiplatform! В статье на реальном примере показывает, как:
👉 Добавить зависимости Navigation 3 в KMP-проект
👉 Определить маршруты через sealed-интерфейсы с @Serializable
👉 Работать с back stack как с обычным mutable list
👉 Создать адаптивные layouts для разных размеров экранов
Особенно полезно будет:
В статье — чистый код из commonMain с примерами навигации между экранами и реализацией bottom navigation.
#compose #cmp #kmp
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥20👍3