Warning: Undefined array key 0 in /var/www/tgoop/function.php on line 65

Warning: Trying to access array offset on value of type null in /var/www/tgoop/function.php on line 65
720 - Telegram Web
Telegram Web
⚙️ Вышел Coil 3.2.0 - загрузчик изображений на Kotlin с поддержкой Compose Multiplatform

Что нового
⬆️ Обновление Kotlin, Compose, Okio, Skiko, Coroutines и др зависимостей до актуальных версий
🛠 Исправление багов
👉 Compose артефакты требуют Java 11 и выше из-за перехода на Compose 1.8.0

#compose
Please open Telegram to view this post
VIEW IN TELEGRAM
⚙️ Критерии Stable типа:

1️⃣ Все свойства val (желательно)
Свойства должны быть только для чтения (val). var допускается, если гарантируется стабильное поведение при изменениях.

2️⃣ Все свойства Stable типов
Все поля должны быть либо примитивами (Int, String, Boolean и т.д.), либо тоже Stable.
Свойства типа () -> Unit не считаются Stable, если не помечены аннотацией @Stable.
Лямбда сама по себе считается Stable типом, но важно что захватывает лямбда в теле и это может приводить к рекомпозиции

3️⃣ Нет reflection и переопределения equals/hashCode
Переопределённые методы могут сделать тип не Stable.

Проще говоря тип считается Stable, если:
👉 Его данные не изменяются неожиданно,
👉 Он не содержит ссылок на нестабильные объекты,
👉 Все его поля либо примитивные, либо Stable-типы.

Подробнее в документации

#compose
Please open Telegram to view this post
VIEW IN TELEGRAM
⚙️ Критерии Immutable типа в Compose

Immutable — это объект, который невозможно изменить после создания, и его поля тоже нельзя изменить (не берем в расчет способы через рефлексию)


1⃣ Все свойства val (строго)
2️⃣ Все свойства — Immutable типы
Каждый property должен быть либо примитивом (Int, String и т.д.), либо другим Immutable типом.
3️⃣ Класс должен быть data class или обычным class без открытых для наследования членов
В идеале — final класс.

// Пример
@Immutable
data class User(val id: Int, val name: String)


Подробнее в документации

#compose
Please open Telegram to view this post
VIEW IN TELEGRAM
⚙️ Когда стоит использовать аннотации @Stable и @Immutable в Jetpack Compose?

@Immutable
👉 Используйте, если ваш класс полностью неизменяемый после создания (все поля val, только immutable-типы).
👉 Это даёт максимальную оптимизацию recomposition — Compose уверен, что объект не поменяется неожиданно.

@Stable
👉 Используйте, если класс допускает изменения, но эти изменения происходят предсказуемо, и вы гарантируете корректную работу с recomposition.
👉 Полезно для сложных классов, коллекций или собственных типов состояния.

Для типов из библиотек можно указать их стабильность через файл конфигурации в Gradle скрипте:
// Указание типа как Stable
java.time.LocalDateTime

// НЕ СТОИТ ТАК ДЕЛАТЬ Указание всех типов в пакете как Stable
com.datalayer.*

// НЕ СТОИТ ТАК ДЕЛАТЬ Указание всех типов в пакете и подпакетах как Stable
com.datalayer.**


Подробнее в документации

#compose
Please open Telegram to view this post
VIEW IN TELEGRAM
⚙️ Strong Skipping Mode в Jetpack Compose - облегчение жизни разработчиков

Strong Skipping Mode — это режим, при котором Compose точно отслеживает изменения параметров composable-функций и пропускает рекомпозицию, если параметры не изменились и считаются Stable.

Как работает режим компилятора
👉 Если параметры функции Stable и равны предыдущим значениям (через Object.equals()), Compose пропускает рекомпозицию этого composable.
👉 Для Unstable типов происходит сравнение через проверку ссылки (вызов === в Kotlin), что минимизировать кол-во рекомпозиций
👉 Даже лямбды (() -> Unit) считаются Stable, но если они захватывают нестабильные объекты, Compose не сможет пропустить рекомпозицию, потому что захваченные значения могут измениться.
👉 При выключенном Strong Skipping режиме Compose реже пропускает рекомпозицию, даже если параметры формально Stable.

Почему это важно?
👉 Strong Skipping помогает избегать ненужных перерисовок и увеличивает производительность UI.
👉 Если вы передаёте в composable нестабильные параметры, skipping работать не будет — функция будет вызываться чаще.

Ключевые моменты:
👉 Лямбды по умолчанию Stable, но их захватываемые значения могут ломать skipping.
👉 Параметры типа SnapshotStateList, SnapshotStateMap, MutableState считаются Stable.
👉 Strong Skipping Mode по умолчанию включён с Kotlin 2.0.20, и его рекомендуется не отключать для современных проектов.

#compose #производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
⚙️ Нужно ли проставлять аннотации @Stable и @Immutable сразу при написании кода? 🤔 Мой ответ — НЕТ!

Не стоит заниматься преждевременной оптимизацией. Пишите 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
⚙️ Compose Unstyled - набор основных компонентов для построения дизайн систем для Compose Multiplatform с поддержкой Desktop, Android, iOS, JS, WASM

Плюсы решения
👉 Компоненты без стилизации
👉 Поддержка доступности и навигации клавиатурой
👉 Простое API
👉 Одинаковое поведение на всех платформах
👉 Хорошая документация
👉 Все компоненты поддерживают все KMP таргеты Compose

#compose #kmp #composemp #android #ios #desktop #wasm #js
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Mobile Compose (Jetpack Compose Bot)
#Video #Compose

Дмитрий Григорьев — Путешествие к центру Композиции


Второй доклад из серии моих "подкапотных разбирательств" с Compose (первый можно посмотреть тут).

На этот раз речь пойдет о Композиции, а в ходе доклада будут рассмотрены такие вопросы как:
▫️Когда и где создается композиция?
▫️Какие структуры данных используются для этого?
▫️Каким именно образом внесенные изменения обновляют дерево Composable-компонентов?

📺 Смотреть доклад 👈
This media is not supported in your browser
VIEW IN TELEGRAM
🐱 WikWok - красивое и удобное приложения, которое из статей Wikipedia делает просмотр в стиле TikTok.

Приложения с 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
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 #навигация
Please open Telegram to view this post
VIEW IN TELEGRAM
⚙️ Вышел Jetpack Compose 1.8.2 с исправлениями багов. Обновляйте Compose BOM до самой свежей версии
dependencies {
implementation(platform("androidx.compose:compose-bom:2025.05.01"))
}


#compose #android
Please open Telegram to view this post
VIEW IN TELEGRAM
⚙️ Вышел Compose Multiplatform 1.8.1

Что нового
👉 Compose библиотека с ресурсами теперь может быть собрана как XCFramework (нужен Kotlin 2.2+)
👉 Теперь можно изменить имя генерируемого класса для Compose Resources (Res->)
🛠 Исправление багов

#compose #composemp
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Android Broadcast
⚙️ Как растет производительность Jetpack Compose

Google показала как они снизили лаги UI на Jetpack Compose за 2 года. Тесте проводились на Pixel 3a

В Compose 1.9.0 появятся еще улучшения:
🚀 Приостановка композции
🚀 Фоновая подготовка текста для отображения
🚀 Улучшения предзагрузки в LazyLayout

#compose #производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
⚙️ Material 3 Expressive уже доступен в Compose

В 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
Forwarded from Android Broadcast
This media is not supported in your browser
VIEW IN TELEGRAM
🔨 Compose превью теперь может быстро менять размеры. Это изменение в Android Studio Narwhal FD позволит проще проверять адаптивность UI, за что так топит Google

#androidstudio #compose
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Kotlin Playground позволяет писать код с Compose Multiplatform и сразу его проверить (используется Compose Web)

#compose #composemp #web
⚙️ Развеиваем мифы о Stability в Compose: оптимизации Strong Skipping (9м)

Интересная статья с экспериментов как происходит рекомпозиция в зависимости от параметров. влияние лямбд и strong skipping режима работы компилятора.

По итогу автор выводит ряд рекомендаций (зайдите поставьте лайк на Хабре за статью):
1️⃣ Compose стал более агрессивно оптимизировать пропуск Composable функций, когда параметры не изменились.
2️⃣ Акцент в отдладке Compose сдвигается от метрик и отчетов к отладке на основе LayoutInspector и других инструментов, потому что метрики и отчеты говорят слишком мало о реальной производительности компонентов.
3️⃣ Чтобы обновить UI, используя нестабильные аргументы, нужно создать новый инстанс такого аргумента в памяти, и метод copy дата-классов для этого отлично подходит.
4️⃣ При работе с коллекциями для оптимизации рекомпозиций больше не нужно использовать Immutable Collections, однако придется обновлять их с созданием нового инстанса. Альтернатива использовать - SnapshotStateList.
5️⃣ При работе с лямбдами для максимальной производительности нужно захватывать только те объекты, которые действительно нужны: если нужно только одно поле класса, лучше прочитать поле в отдельную переменную и сослаться на нее.

🐱 Код из статьи есть на GitHub

#compose #производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
2025/07/04 12:37:14
Back to Top
HTML Embed Code: