ViewBinding и утечки памяти
- Часто встречаются рекомендации выставлять view binding в null, чтобы избежать утечек памяти
- Жизненный цикл View дестко привязан к Activity, поэтому в этом случае самостоятельно занулять не надо, все решится само
- В случае фрагментов ситуация другая – вью могут создаваться и уничтожаться, поэтому освобождать view binding вручную
нужно
- Для ViewHolder выставлять view binding в null тоже не требуется
- Часто встречаются рекомендации выставлять view binding в null, чтобы избежать утечек памяти
- Жизненный цикл View дестко привязан к Activity, поэтому в этом случае самостоятельно занулять не надо, все решится само
- В случае фрагментов ситуация другая – вью могут создаваться и уничтожаться, поэтому освобождать view binding вручную
нужно
- Для ViewHolder выставлять view binding в null тоже не требуется
Используем Koin для организации DI не только в Kotlin и KMM коде, но и в Swift
Хорошая идея по тому, как можно прикрутить Koin для резолва KMM зависимостей в Swift коде через самописную аннотацию
Хорошая идея по тому, как можно прикрутить Koin для резолва KMM зависимостей в Swift коде через самописную аннотацию
Решаем проблему множественных кликов в Compose
Разбор нескольких подходов к тому, чтобы не инициировать лишние действия в приложении, когда пользователь вызывает одно и то же событие несколько раз.
Разбор нескольких подходов к тому, чтобы не инициировать лишние действия в приложении, когда пользователь вызывает одно и то же событие несколько раз.
Medium
How to prevent multiple clicks in Android Jetpack Compose
Sometimes a user of your app may be a “monkey.” Funny, right? It is only a term, and what does it mean you can find here. But in simple…
Все видео Droidcon Berlin 2022
В открытый доступ выложили все видео недавнего Droidcon Berlin. Советую начать вот с этих:
📹Deep Dive into DEX Files Byte-by-Byte
📹Diving into Koin 3.2
📹How we Migrated the CI/CD of our Android App to GitHub Actions
📹5 Ways to Improve Your Android Build Productivity
В открытый доступ выложили все видео недавнего Droidcon Berlin. Советую начать вот с этих:
📹Deep Dive into DEX Files Byte-by-Byte
📹Diving into Koin 3.2
📹How we Migrated the CI/CD of our Android App to GitHub Actions
📹5 Ways to Improve Your Android Build Productivity
Talking Kotlin: Kotlin Design Patterns
Еще одно видео вам в список просмотра – Алексей Соснин, автор книги Kotlin Design Patterns, рассказывает про ее содержание и делится best practices, которых придерживается сам.
Еще одно видео вам в список просмотра – Алексей Соснин, автор книги Kotlin Design Patterns, рассказывает про ее содержание и делится best practices, которых придерживается сам.
YouTube
Kotlin Design Patterns and Best Practices | Talking Kotlin
We chat with Alexey about Kotlin Design Patterns and Best Practices and his recently released book, "Kotlin Design Patterns and Best Practices."
Discount for the "Kotlin Design Patterns and Best Practices" book!
Discount code: 25ALEXEY
Start-end date: 27th…
Discount for the "Kotlin Design Patterns and Best Practices" book!
Discount code: 25ALEXEY
Start-end date: 27th…
Instantiator – библиотека для быстрого создания тестовых объектов
- Значительная часть unit-тестов проверяет разные виды трансформации данных из одного формата в другой, из-за чего приходится инстанциировать много объектов с семпловыми данными
- Instantiator использует рефлексию, чтобы предзаполнить дата классы тестовыми данными
- Значительная часть unit-тестов проверяет разные виды трансформации данных из одного формата в другой, из-за чего приходится инстанциировать много объектов с семпловыми данными
- Instantiator использует рефлексию, чтобы предзаполнить дата классы тестовыми данными
Оптимизация перфоманса
Набор советов по оптимизации различных характеристик перфоманса: рендеринга, потребления памяти, батареи и сети.
Набор советов по оптимизации различных характеристик перфоманса: рендеринга, потребления памяти, батареи и сети.
Compose или XML: кто быстрее
Команда, переписывающая свое приложение с XML на Compose, решила провести A/B тесты перфоманса на продакшне для старой и новой реализации.
- При первом открытии экрана на Compose он хуже XML по количеству frozen frames и page load duration
- При открытии следующего экрана с похожими компонентами frozen frame rate улучшается на 60%, а page load duration на 35%
- Так происходит, потому что XML Layouts всегда прекомпилированы, а в Compose – компилируются на лету, а потом кешируются
Команда, переписывающая свое приложение с XML на Compose, решила провести A/B тесты перфоманса на продакшне для старой и новой реализации.
- При первом открытии экрана на Compose он хуже XML по количеству frozen frames и page load duration
- При открытии следующего экрана с похожими компонентами frozen frame rate улучшается на 60%, а page load duration на 35%
- Так происходит, потому что XML Layouts всегда прекомпилированы, а в Compose – компилируются на лету, а потом кешируются
Как использовать Palette API
- Библиотека Palette помогает легко вытащить палитру цветов из любого изображения
- Палитра состоит из шести оттенков: Light Vibrant, Vibrant, Dark Vibrant, Light Muted, Muted, Dark Muted
- Ее можно использовать, чтобы адаптировать интерфейс приложения под открытое сейчас изображение
- Библиотека Palette помогает легко вытащить палитру цветов из любого изображения
- Палитра состоит из шести оттенков: Light Vibrant, Vibrant, Dark Vibrant, Light Muted, Muted, Dark Muted
- Ее можно использовать, чтобы адаптировать интерфейс приложения под открытое сейчас изображение
Инлайн-функция для выполнения запроса с ретраем
При работе с удаленными ресурсами разумно использовать автоматические ретраи, ведь сеть ненадежна. В статье автор поэтапно дорабатывает инлайн-функцию, которая умеет автоматически ретраить вызов.
При работе с удаленными ресурсами разумно использовать автоматические ретраи, ведь сеть ненадежна. В статье автор поэтапно дорабатывает инлайн-функцию, которая умеет автоматически ретраить вызов.
Medium
Kotlin Retry To Make Your Code More Resilient
Kotlin wrapper function to Retry any part of a code
Подробный разбор плюсов и минусов КММ в сравнении с нативной разработкой
- Чтобы оценить готовность КММ к продакшну, ребята реализовали на нем четыре тестовых проекта
- Оценивали сложность дебага, интероп, тулинг, перфоманс, влияние на размер приложения, сложность написания базовой логики и много чего еще
- Чтобы оценить готовность КММ к продакшну, ребята реализовали на нем четыре тестовых проекта
- Оценивали сложность дебага, интероп, тулинг, перфоманс, влияние на размер приложения, сложность написания базовой логики и много чего еще
Plugable Features
Некоторым экранам нужно знать о большом количестве других фичей в проекте. Хороший пример – экран DeveloperSettings, на котором можно включать фичетоглы и менять глобальные настройки. Автор рассказывает, как с помощью Dagger Multibindings или ServiceLoader построить переиспользуемый экран настроек, не привязанный к одному App-модулю.
Некоторым экранам нужно знать о большом количестве других фичей в проекте. Хороший пример – экран DeveloperSettings, на котором можно включать фичетоглы и менять глобальные настройки. Автор рассказывает, как с помощью Dagger Multibindings или ServiceLoader построить переиспользуемый экран настроек, не привязанный к одному App-модулю.
Building Plugable Features on Android
Building Plugable Features on Android :: Ryan Harter
Modularization of Gradle projects can ease a team's growing pains, but can also introduce challenges when architecting features that require knowledge of the specific modules used in an app. This post looks at approaches for dynamically aggregating dependencies…
Релиз Ktor 2.1.0
Вышел новый релиз Ktor, основные изменения в котором касаются его серверной части. Особенно упрощается жизнь для новичков в бэкенде:
- CLI генератор новых проектов, который, помимо создания проекта по шаблону, сразу настраивает все окружение
- Gradle Deployment Plugin, который умеет собирать проект и в docker контейнер, и в fat jar
Вышел новый релиз Ktor, основные изменения в котором касаются его серверной части. Особенно упрощается жизнь для новичков в бэкенде:
- CLI генератор новых проектов, который, помимо создания проекта по шаблону, сразу настраивает все окружение
- Gradle Deployment Plugin, который умеет собирать проект и в docker контейнер, и в fat jar
Типовые архитектурные паттерны переоценены
- В реальной жизни дизайн многих систем разрабатывается не так, как в книгах. Их не разрабатывают выделенные архитекторы, не документируют сложными стандартами вроде С4, не используют UML, и не пытаются привести к словарю стандартных архитектурных паттернов банды четырех
- Задача инженера – выработать максимально простую архитектуру, которая поможет решить текущую бизнес-проблему. Соответствие стандартным подходам часто влечет за собой излишнюю сложность
- Главная роль паттернов – в повышении вашей насмотренности
- Чтобы прокачаться в system design, прорабатывайте архитектуру сложных кейсов самостоятельно, запрашивайте фидбэк у коллег, сравнивайте разные варианты дизайна друг с другом, проводите ревью у других людей
- В реальной жизни дизайн многих систем разрабатывается не так, как в книгах. Их не разрабатывают выделенные архитекторы, не документируют сложными стандартами вроде С4, не используют UML, и не пытаются привести к словарю стандартных архитектурных паттернов банды четырех
- Задача инженера – выработать максимально простую архитектуру, которая поможет решить текущую бизнес-проблему. Соответствие стандартным подходам часто влечет за собой излишнюю сложность
- Главная роль паттернов – в повышении вашей насмотренности
- Чтобы прокачаться в system design, прорабатывайте архитектуру сложных кейсов самостоятельно, запрашивайте фидбэк у коллег, сравнивайте разные варианты дизайна друг с другом, проводите ревью у других людей
The Pragmatic Engineer
Software Architecture is Overrated, Clear and Simple Design is Underrated
I had my fair share in designing and building large systems. I've taken part in
rewriting Uber's distributed payment systems
[https://blog.pragmaticengineer.com/distributed-architecture-concepts-i-have-learned-while-building-payments-systems/]
, designing…
rewriting Uber's distributed payment systems
[https://blog.pragmaticengineer.com/distributed-architecture-concepts-i-have-learned-while-building-payments-systems/]
, designing…
Event Handlers в Compose
Event Handler’ы помогают обеспечить корректное выполнение сайд эффектов: их исполнение в правильные моменты жизненного цикла, управление ресурсами и отмену. В статье разбираются различные виды event handler’ов и подходящий контекст для их использования.
Event Handler’ы помогают обеспечить корректное выполнение сайд эффектов: их исполнение в правильные моменты жизненного цикла, управление ресурсами и отмену. В статье разбираются различные виды event handler’ов и подходящий контекст для их использования.
MAD Skills: За какими метриками перфоманса надо следить
- Фазы старта приложения: cold start, warm start, hot start
- Time to initial display – время до отрисовки первого фрейма приложения
- Time to full display – время до загрузки всего контента, достаточного для работы с экраном
- Frame rates должны сменяться не реже чем раз в 11.1ms
- Фазы старта приложения: cold start, warm start, hot start
- Time to initial display – время до отрисовки первого фрейма приложения
- Time to full display – время до загрузки всего контента, достаточного для работы с экраном
- Frame rates должны сменяться не реже чем раз в 11.1ms
Релиз Qodana 2022.2
- Qodana – платформа для мониторинга качества кода от JetBrains, поддерживающая Kotlin и Java
- Ее легко интегрировать с GitHub Actions, Teamcity и другими CI серверами
- В новом релизе появилась куча дополнительных инспекций, в том числе возможность замены >=/<= на ==, проверка на reassign переменной и verbose nullability.
- Qodana – платформа для мониторинга качества кода от JetBrains, поддерживающая Kotlin и Java
- Ее легко интегрировать с GitHub Actions, Teamcity и другими CI серверами
- В новом релизе появилась куча дополнительных инспекций, в том числе возможность замены >=/<= на ==, проверка на reassign переменной и verbose nullability.
Collecting flows in a lifecycle-aware manner
- Как collectAsStateWithLifecycle работает под капотом
- Как встроить Flow collection в свою архитектуру с учетом жизненного цикла приложения
- В чем отличие от collectAsAtate
- Как collectAsStateWithLifecycle работает под капотом
- Как встроить Flow collection в свою архитектуру с учетом жизненного цикла приложения
- В чем отличие от collectAsAtate
Как работает WorkManager
- WorkManager – библиотека, которая помогает организовать фоновую работу приложения
- Вторая задача WorkManager – гарантированное выполнение переданных ему задач, вне зависимости от режима работы приложения
- Детали того, как конкретно библиотека работает
- Разбор новых возможностей WorkManager на примерах
- WorkManager – библиотека, которая помогает организовать фоновую работу приложения
- Вторая задача WorkManager – гарантированное выполнение переданных ему задач, вне зависимости от режима работы приложения
- Детали того, как конкретно библиотека работает
- Разбор новых возможностей WorkManager на примерах
This media is not supported in your browser
VIEW IN TELEGRAM
Как в Tinder адоптили Compose
Как и в других приложениях с огромной кодовой базой и несколькими мобильными командами, в Tinder не были готовы сходу тащить Compose в бой. Они выбрали очень плавную стратегию внедрения.
- Создали демо-приложение, в котором реализовали несколько типичных для Tinder контролов и экранов с помощью Compose, дали команде с ним поиграться
- Оценили влияние Compose на developer experience: скорость сборки, возня с версиями зависимостей.
- Перевели на Compose наименее популярный экран – список опенсорсных лицензий
- Перевели на Compose свои внутренние инструменты
- Начали постепенно переводить на Compose компоненты своей дизайн-системы, затаскивая таким образом его на все экраны в приложении
Как и в других приложениях с огромной кодовой базой и несколькими мобильными командами, в Tinder не были готовы сходу тащить Compose в бой. Они выбрали очень плавную стратегию внедрения.
- Создали демо-приложение, в котором реализовали несколько типичных для Tinder контролов и экранов с помощью Compose, дали команде с ним поиграться
- Оценили влияние Compose на developer experience: скорость сборки, возня с версиями зависимостей.
- Перевели на Compose наименее популярный экран – список опенсорсных лицензий
- Перевели на Compose свои внутренние инструменты
- Начали постепенно переводить на Compose компоненты своей дизайн-системы, затаскивая таким образом его на все экраны в приложении