Как стать автором
Обновить
13
0
Максим Юдин @tum0rc0re

Сертифицированный Android-разработчик

Отправить сообщение

В каких случаях использовать функцию derivedStateOf из Jetpack Compose

Уровень сложностиСредний
Время на прочтение4 мин
Количество просмотров5.2K

derivedStateOf { ... }

derivedStateOf - это функция, которая из исходных объектов State формирует производный State. Основной смысл применения функции derivedStateOf - понизить частоту изменения исходного State, тем самым избавиться от ненужных рекомпозиций.

Лямбда-выражение, которое передается в derivedStateOf, выполняется каждый раз, когда изменяется любой из входных объектов State, и результат используется для обновления значения производного State. Важно понимать, что лямбда-выражение будет вызываться повторно только если изменится свойство value объекта State и чтение этого свойства происходит в этой лямбде. Изменение захваченных переменных другого типа не приведет к повторному вызову лямбда-выражения.

У объекта State может читаться свойство value в одной или нескольких compose-функциях. Через объект MutableState можно менять свойство value в callback'ах compose-функций или где-то еще за пределами compose, например во ViewModel'и. Если свойство изменилось, то в процессе построения следующего кадра произойдет рекомпозиция (повторный вызов) тех compose-функций, где это свойство читается. Таким образом частота изменения объекта MutableState определяет частоту рекомпозиций, но не чаще чем системный Frame rate, это примерно 60Hz, то есть 60 раз в секунду. Когда изменится State, Compose обновит UI при построении следующего кадра.

Когда частота изменения State слишком высокая, или другими словами есть некоторая последовательность изменений value State'а, при которой не нужно обновлять UI пускай даже значения разные, а следовательно не нужно совершать рекомпозицию, в этих случаях нужно использовать derivedStateOf. derivedStateOf определяет производный объект State от одного или нескольких других объектов State. Производный State должен обобщать исходные объекты State, то есть исходное множество значений State должно делиться на подмножества, и каждое такое подмножество будет соответствовать значению из производного множества. Изменения исходного State не всегда будут приводить к изменению производного State, таким образом понижается частота рекомпозиций.

Читать далее
Всего голосов 5: ↑4 и ↓1+3
Комментарии1

Compose-recompose: почему происходят рекомпозиции и как уменьшить их количество

Время на прочтение17 мин
Количество просмотров12K

В Compose приложение состоит из функциональных компонентов, каждый из которых представляет собой отдельную часть пользовательского интерфейса. Компоненты в Jetpack Compose могут многократно использоваться и комбинироваться для создания более крупных пользовательских интерфейсов.

Однако, если подходить к процессу написания кода спустя рукава, Compose будет пытаться рекомпозировать множество неизменившихся частей пользовательского интерфейса. А из-за того, что рекомпозиции могут происходить на каждый кадр отрисовки, это может пагубно сказаться на производительности приложений.

В этой статье я разберу основные понятия, которые необходимы для использования Compose в проектах, а ещё объясню, как делать не стоит. Надеюсь, что мой пост поможет начинающим разработчикам предупредить часть ошибок, которые могут возникнуть в процессе работы.

Читать далее
Всего голосов 14: ↑14 и ↓0+14
Комментарии6

Drag and Drop в Jetpack Compose

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров1.3K

В январе 2024, крупное обновление Jetpack Compose добавило два новых модификатора: dragAndDropSource и dragAndDropTarget. В этой статье я расскажу как реализовать эффект Drag and Drop в Jetpack Compose.

Читать далее
Всего голосов 2: ↑2 и ↓0+2
Комментарии0

Уровень Android API, обратная и прямая совместимость

Время на прочтение7 мин
Количество просмотров69K
Добрый вечер, друзья. Мы подготовили полезный перевод для будущих студентов курса «Android-разработчик. Продвинутый курс». С радостью делимся с вами данным материалом.




Если вы читаете эту статью, значит вас могут интересовать такие вещи, как:

  • Что означает уровень API?
  • Как использовать compileSdkVersion, minSdkVersion или targetSdkVersion?
  • Как можно гарантировать, что приложение будет работать правильно на устройствах с разными версиями ОС?
Читать дальше →
Всего голосов 16: ↑14 и ↓2+12
Комментарии1

Погружаемся в работу со скроллом в Jetpack Compose

Время на прочтение8 мин
Количество просмотров14K

В этой статье я хочу поделиться опытом работы со скроллом в приложении, написанном на Jetpack Compose.

Какое-то время назад я решил, что надо попробовать Compose в деле и начал делать pet project приложение Хотелки, суть которого в записи своих желаний и возможности делиться списком желаний с помощью любого мессенджера.

В ходе работы над приложением мне пришлось вплотную поработать со скроллом: определять текущую позицию и скроллить к определенному элементу списка, когда появляется клавиатура. Этим опытом я и хочу поделиться в данной статье. 

Читать далее
Всего голосов 12: ↑12 и ↓0+12
Комментарии3

SwiftUI уроки (часть 1)

Время на прочтение9 мин
Количество просмотров3.6K

В чём особенность этих уроков?

Основаны на книге "Mastering SwiftUI" от Appcoda: Мы берем за основу материал этой книги, но не слепо следуем ей.

Интерпретация и перевод: Мы адаптируем материал книги для русскоговорящей аудитории, делая его более понятным и удобным для восприятия.

Для начинающих и опытных: Эти уроки подойдут как тем, кто только начинает изучать SwiftUI, так и тем, кто хочет узнать что-то новое об этом фреймворке.

Чего вы можете ожидать?

Пошаговое изучение SwiftUI: Мы будем проходить все основные темы, от простых до сложных.

Практические примеры: Вы сможете закрепить полученные знания, выполняя практические задания.

Присоединяйтесь к этой серии!

Читать далее
Всего голосов 5: ↑5 и ↓0+5
Комментарии1

SwiftUI уроки (часть 2)

Время на прочтение12 мин
Количество просмотров1.7K

Если вы уже ознакомились с первой частью, то у вас есть базовое понимание что из себя представляет SUI и знаете как отобразить текстовый контент, в этой части давайте познакомимся с элементом отображающим изображения.

Читать далее
Всего голосов 4: ↑4 и ↓0+4
Комментарии0

SwiftUI уроки (часть 3)

Время на прочтение15 мин
Количество просмотров1.6K

Ссылка на часть 2

Создаем UI с помощью стеков

Стеки в SUI похожи на стеквью в UIKit. Если комбинировать горизонтальные и вертикальные стеки можно создать комплексный UI для приложения, который будет отлично адаптировать под различные размеры экранов и типы устройств. В UIKit основное средство создания UI — это auto layout который применяется для правильного отображения вьюшек на экране. Зачастую для начинающих разработчиков автолейаут кажется чем‑то очень сложным как для применения так и обучения, так что если вы уже переходите на SUI — есть хорошие новости, автолэйаут вам больше не потребуется. Вы будете оперировать такими компонентами как VStack, HStack, ZStack.

Читать далее
Всего голосов 4: ↑4 и ↓0+4
Комментарии1

Про тестирование мобильных приложений. Часть 4. Интеграционное тестирование

Уровень сложностиСредний
Время на прочтение8 мин
Количество просмотров2.7K

Ранее мы с вами познакомились с 2 группами тестирования, расположенными в основании и на вершине пирамиды тестирования. Пришло время познакомиться с единственной, не рассмотренной на данный момент и наиболее интересной по моему мнению частью – интеграционным тестированием. 

Читать далее
Всего голосов 3: ↑3 и ↓0+3
Комментарии2

Про тестирование мобильных приложений. Часть 3. Cквозное (UI, e2e) тестирование

Уровень сложностиПростой
Время на прочтение8 мин
Количество просмотров3.9K

Ранее мы с вами познакомились с пирамидой тестирования и ее основанием. В данной же статье предлагаю перейти к вершине.

Читать далее
Всего голосов 6: ↑5 и ↓1+4
Комментарии0

Про тестирование мобильных приложений. Часть 2. Unit tests

Время на прочтение13 мин
Количество просмотров5.2K

В предыдущей статье был приведен краткий обзор основных понятий и тем, о которых речь пойдет дальше. Предлагаю начать с модульных тестов, более известных, как юнит тесты.

Читать далее
Всего голосов 3: ↑3 и ↓0+3
Комментарии16

Про тестирование мобильных приложений. Часть 1. Обзор

Время на прочтение4 мин
Количество просмотров4.1K

Занимаясь разработкой мобильных приложений под операционную систему Android уже более 7 лет, я успел поработать в разных частях мира в самых разных компаниях, от небольших стартапов до технологических гигантов и накопил некоторый практический опыт в области автоматизированного тестирования мобильных приложений, которым хотел бы поделиться в цикле статей.

Читать далее
Рейтинг0
Комментарии2

Как катить фичи без релизов. Часть 2: про низкоуровневый Server Driven UI

Уровень сложностиСредний
Время на прочтение7 мин
Количество просмотров5.3K

Server Driven UI в Альфа Банке — это низкоуровневый и гибкий подход для реализации динамической отрисовки UI, управляемый с сервера. Если дословно перевести, то SDUI переводится как пользовательский интерфейс (UI), управляемый сервером. На деле так и получается — API сообщает фронту, что и с каким содержимым отображать. 

Например, если дизайнер указал, что цвет фона в UI-компоненте кастомизируется, то SDUI модель для этого компонента должна по умолчанию уметь настраивать цвет с бэкэнда. Аналогично со всеми другими свойствами компонентов: шрифт, размер, форма. 

В статье расскажу, как мы максимально приблизили SDUI к дизайн-системе Альфа Мобайла, чтобы с его помощью отрисовать любой UI, который нам позволяет сделать дизайн-система. А также о том, как развивался SDUI, что в нём содержится, как работает и когда SDUI использовать всё же не стоит. 

Читать далее
Всего голосов 27: ↑27 и ↓0+27
Комментарии14

Как катить фичи без релизов. Часть 1: про виджеты

Уровень сложностиСредний
Время на прочтение9 мин
Количество просмотров5.6K

Backend-Driven UI — это подход для динамичного и гибкого пользовательского интерфейса, в которой бэкенд управляет не только данными в приложении, но и его вёрсткой. Сервер посредством API сообщает приложению какие компоненты и с каким контентом отображать. Сегодня многие команды разработки используют Backend Driven UI и мы в Альфе не исключение — помогает быстро выпускать фичи в продакшн.

У нас в Альфе есть несколько подходов к BDUI и про один из них как раз сегодня поговорим, он называется «Виджеты». Независимость, переиспользуемость, уменьшение копипасты, стандартизация UX и без ревью — это всё о них.

Читать далее
Всего голосов 25: ↑25 и ↓0+25
Комментарии7

Android изнутри: сравнение Dalvik и ART

Время на прочтение6 мин
Количество просмотров35K
Привет, Хабр! Около полугода назад я публиковал подробный «гайд» по JVM. Пост, в целом, зашел, а в комментариях спросили, не планируется ли “чего-то по андроиду”. Наконец, у меня дошли руки.



В этом посте поговорим о среде выполнения в Android. В частности, я постараюсь кратко, но емко изложить, чем отличается ART и Dalvik, и как со временем улучшились средства разработки в Android. Тема явно не новая, но, надеюсь, придется кстати тем, кто только начинает вникать. Кому интересно — добро пожаловать под кат.
Читать дальше →
Всего голосов 18: ↑16 и ↓2+14
Комментарии14

Математика для 3D-приложений. Урок 1

Время на прочтение6 мин
Количество просмотров26K

Это первый, вводный урок по линейной алгебре для разработки 3D-приложений от Александра Паничева — ведущего разработчика логики в UNIGINE. В этом уроке разберемся зачем 3D-разработчикам вообще нужна линейная алгебра, а также рассмотрим основные операции над векторами.

Читать далее
Всего голосов 24: ↑23 и ↓1+22
Комментарии12

Основы линейной алгебры для 3D-приложений. Урок 2

Время на прочтение7 мин
Количество просмотров18K

Продолжаем разбираться с линейной алгеброй для 3D-приложений вместе Александром Паничевым — ведущим разработчиком логики в UNIGINE. В прошлом уроке мы поговорили про предназначение математики в трехмерной графике и вспомнили основные операции над векторами. А в этом уроке переходим к более сложным темам: углы Эйлера и кватернионы.

Читать далее
Всего голосов 19: ↑19 и ↓0+19
Комментарии6

Основы линейной алгебры для 3D-приложений. Урок 3

Время на прочтение3 мин
Количество просмотров8K

Завершающий урок из цикла про линейную алгебру для 3D-приложений от Александра Паничева — ведущего разработчика логики в UNIGINE. В прошлом уроке мы разобрали углы Эйлера и кватернионы, а в этот раз говорим о матрицах и подводим итоги.

Читать далее
Всего голосов 6: ↑5 и ↓1+4
Комментарии2

Кривые в компьютерной графике. Урок 1: Анимации

Время на прочтение6 мин
Количество просмотров7.7K

Мы продолжаем цикл статей про математику и смежные дисциплины в компьютерной графике по курсу Александра Паничева, ведущего разработчика логики в UNIGINE. В этот раз поговорим о функциях плавности, которые используются в анимации (и не только).

Читать далее
Всего голосов 15: ↑14 и ↓1+13
Комментарии5

Gradle Plugin: Что, зачем и как?

Время на прочтение15 мин
Количество просмотров27K

Доброго времени, читатель! В предыдущей статье мы рассмотрели, как эффективно использовать стандартные инструменты Gradle в проектах для решения повседневных задач и немного коснулись подкапотного пространства.

Под катом статьи проведём тур по Gradle-плагинам, разберёмся, для чего вы можете писать кастомные плагины уже сейчас, проникнемся процессом разработки на примере реализации плагина для Kotlin-кодогенерации и научимся обходить некоторые Gradle-грабли. 

В первой части статьи проведём небольшой теоретический экскурс и рассмотрим способы реализации плагинов, а во второй части двинемся к практической задаче и проникнемся разработкой плагина для Kotlin-кодогенерации. Заваривайте ваш любимый напиток и поехали.

Читать далее
Всего голосов 10: ↑10 и ↓0+10
Комментарии3
1
23 ...

Информация

В рейтинге
Не участвует
Откуда
Мытищи, Москва и Московская обл., Россия
Зарегистрирован
Активность

Специализация

Mobile Application Developer
Lead
От 500 000 ₽
Android development
Kotlin
Android SDK
Dagger 2
RxJava 2
Development of mobile applications
Google Firebase
Client-server applications
Material Design
MVVM