Как правильно работать с MutableStateFlow внутри ViewModel и из вне
Если вы пишите под Android и используете MVVM и корутины, то у вас будет подобный код
По всем рекомендациям мы не должны давать наружу изменяемое состояние и все изменения должны делать только через методы. Самый простой вариант - указание отдельного публичного типа.
Каждое обращение к свойства state будет приводить к созданию новому экземпляру
Больше подобных моих материалов и подборка интересных статей, книг, видео есть в Базе Знаний Android разработчика
#android #kotlin #coroutines #jetpack #viewmodel #AndroidBroadcast #БазаЗнаний
Если вы пишите под Android и используете MVVM и корутины, то у вас будет подобный код
class YourViewModel() : ViewModel() {
val state = MutableStateFlow<State>(State.Initial)
}По всем рекомендациям мы не должны давать наружу изменяемое состояние и все изменения должны делать только через методы. Самый простой вариант - указание отдельного публичного типа.
class YourViewModel() : ViewModel() {
private val _state = MutableStateFlow<State>(State.Initial)
val state: StateFlow<State>
get() = _state
}В Kotlin есть возможность указать разного типа для свойства и его field, но пока доступна только как экспериментальная. Использовать её в продакшен коде на текущем этапе жизни не рекомендуетсяС таким подходом мы закрыли через приведение типа на уровне свойства. Авторы Kotlin Coroutines позаботились о нас и сделали нашу жизнь проще с помощью функции asStateFlow(), который под капотом обернет
MutableStateFlow в ReadonlyStateFlow и вернёт его как StateFlow. Применяя оператор мы получим следующий код:class YourViewModel() : ViewModel() {
private val _state = MutableStateFlow<State>(State.Initial)
val state: StateFlow<State>
get() = _state.asStateFlow()
}Каждое обращение к свойства state будет приводить к созданию новому экземпляру
StateFlow, что является лишним, так как один StateFlow может иметь несколько коллекторов (подписчиков) на данные и никак не повлияет на работу, то можно сразу задавать свойство безе перегрузки get()class YourViewModel() : ViewModel() {
private val _state = MutableStateFlow<State>(State.Initial)
// Создаем StateFlow, предназначенный для получения
// состояния из вне ViewModel
val state = _state.asStateFlow()
}Больше подобных моих материалов и подборка интересных статей, книг, видео есть в Базе Знаний Android разработчика
#android #kotlin #coroutines #jetpack #viewmodel #AndroidBroadcast #БазаЗнаний
👍71 13🤯5❤1
Стала доступна запись моего доклада с Mobius где я рассказал про проблему монополии мобильных сервисов и предложил своё решение для светлого будущего новых мобильных ОС
#mobius
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥21👍9
Forwarded from AvitoTech
This media is not supported in your browser
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
«Как поздравить наших подписчиков с Новым годом?»
Этим вопросом мы задались еще в ноябре. «Крутили» с командой разные идеи, но одна вдохновила больше всех — сделать адвент-календарь для тех, кто создает продукты и сервисы. И вот, мы выкатываем его в прод!
В календаре собрали некоторые принципы из нашего Playbook, в котором прописаны правила инженерной команды Авито. Их легко адаптировать под свои рабочие задачи, а некоторые можно даже переложить на ежедневную рутину.
Тапайте на ячейки, забирайте нужное, улучшайте разработку и инженерную культуру вместе с нами.
Поздравляем с наступающим Новым годом✨
Этим вопросом мы задались еще в ноябре. «Крутили» с командой разные идеи, но одна вдохновила больше всех — сделать адвент-календарь для тех, кто создает продукты и сервисы. И вот, мы выкатываем его в прод!
В календаре собрали некоторые принципы из нашего Playbook, в котором прописаны правила инженерной команды Авито. Их легко адаптировать под свои рабочие задачи, а некоторые можно даже переложить на ежедневную рутину.
Тапайте на ячейки, забирайте нужное, улучшайте разработку и инженерную культуру вместе с нами.
Поздравляем с наступающим Новым годом
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤12👍5
В прямом эфире буду подводить итоги 2024: Android, Kotlin, блог
Конечно же отвечу на ваши вопросы по тебе разработки и не только
Запись будет доступа на каналах после эфира
Подключайтесь!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17
Google Play объявила лучшие приложения и игры 2024 года
🏆 Лучшее приложения - планировщик событий Partiful
🏆 Лучшая игра - AFK Journey
🏆 Лучшее приложение для разных устройств - онлайн-кинотеатр Max
🏆 Лучшая играя для разных устройств - Clash of Clans
Остальных победителей смотрите в статье
#googleplay
Остальных победителей смотрите в статье
#googleplay
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9
Оптимизация под контролем: инструменты и метрики для Аndroid-приложений (11м)
В статье рассказывается про оптимизацию времени запуска Android-приложения, разбираются основные метрики старта и инструменты, с помощью которых можно анализировать производительность.
#android #производительность
В статье рассказывается про оптимизацию времени запуска Android-приложения, разбираются основные метрики старта и инструменты, с помощью которых можно анализировать производительность.
#android #производительность
👍17
Пример разработки плагина для Android Studio (10м)
Подробное руководство от создания проекта до публикации в магазин JetBrains. Автор показывает всё на примере проверки грамотности в сообщениях к коммитам в Git. Результат - плагин PreCommitSpellChecker
#androidstudio
Подробное руководство от создания проекта до публикации в магазин JetBrains. Автор показывает всё на примере проверки грамотности в сообщениях к коммитам в Git. Результат - плагин PreCommitSpellChecker
#androidstudio
👍18❤2🤯1🎉1
Inure App Manager - Android приложение с открытым исходным кодом для управления другими приложения, получением информации и их модификацией
Установить из Google Play, а полная версия уже за деньги
#android #пример #opensource
Установить из Google Play, а полная версия уже за деньги
#android #пример #opensource
👍11
Forwarded from Тест-раннер Emcee
Всем привет! Подготовили для вас последний в текущем году релиз. Что нового:
1⃣ Артефакты для xctestrun конфигов обрабатываются еще быстрее;
2⃣ улучшили механизм дискаверинга нативных iOS тестов;
3⃣ пофиксили баг, при котором очередь могла внезапно потерять бакет из-за перезапуска воркера;
4⃣ добавили возможность использования env- переменных в emceeplan файле для чувствительных данных - вроде пароля для artifactory user;
5⃣ добавили ресурсов в облако и сделали его работу еще быстрее.
Напоминаем, что попробовать Emcee можно бесплатно на 10 воркерах➕ при регистрации в облаке в января предоставляем 300 минут для прогона ваших тестов бесплатно! 🎁
Всех с наступающим Новым годом, до встречи в 2025!🌲
Напоминаем, что попробовать Emcee можно бесплатно на 10 воркерах
Всех с наступающим Новым годом, до встречи в 2025!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Я занимаюсь разработкой неофициального Kotlin Multiplatfrom клиента сервиса Frame.io под Android, Desktop и iOS.
Уже вышло 7 видео:
- О проекте
- Генерация клиента REST API через Open API схему
- Создание и настройка проекта в Android Studio
- Настройка GitHub Репозитория
- Что важно учесть на этапе дизайна. Дизайн приложения FrameIO
- Настройка UI Kit на основе Material3
- Реализация работы с Frame.io REST API
Вы также получите доступ к исходном коду на GitHub и дизайну на Figma! Всё обсуждение ведем в Telegram чате
Чтобы получить доступ надо оформить подписку уровня Senior или выше, либо за единоразовую оплату навсегда
#AndroidBroadcast #видео #frameio
Уже вышло 7 видео:
- О проекте
- Генерация клиента REST API через Open API схему
- Создание и настройка проекта в Android Studio
- Настройка GitHub Репозитория
- Что важно учесть на этапе дизайна. Дизайн приложения FrameIO
- Настройка UI Kit на основе Material3
- Реализация работы с Frame.io REST API
Вы также получите доступ к исходном коду на GitHub и дизайну на Figma! Всё обсуждение ведем в Telegram чате
Чтобы получить доступ надо оформить подписку уровня Senior или выше, либо за единоразовую оплату навсегда
#AndroidBroadcast #видео #frameio
👍23