‼️ Tracer 1.0.0 релизнули
Вышла долгожданная версия Tracer 1.0.0. Тем кому это важно могут начать использовать инструмент чтобы следить за крешами, производительностью и состоянием устройства. Всё это полностью бесплатно!
Поздравляю всю команду с релизом и желаю им процветания и развития
#tracer
Вышла долгожданная версия Tracer 1.0.0. Тем кому это важно могут начать использовать инструмент чтобы следить за крешами, производительностью и состоянием устройства. Всё это полностью бесплатно!
Поздравляю всю команду с релизом и желаю им процветания и развития
#tracer
🔥66👍20❤6
🤯 Обновление работы WorkManager и JobSchedule в Android 16
При запуске обычной и Expedited Job (через JobScheduler или WorkManager) её выполнение зависит от квоты приложения на выполнение работы в фоне и в Android 16 она изменяется:
👉 В зависимости от app standby bucket в котором находится приложение
👉 Если Job была запущена пока приложение показывалось пользователю, то она сможет продолжится после скрытия приложения. система выделит дополнительную квоту на выполнение.
Из текста непонятно как изменение повлияет на остановку Job, но точно остылают к API для того чтобы понять причину остановки или почему не запускается выполнение
Изменение поведения коснётся всех приложения, независимо от targetSdk
#android16 #workmanager
При запуске обычной и Expedited Job (через JobScheduler или WorkManager) её выполнение зависит от квоты приложения на выполнение работы в фоне и в Android 16 она изменяется:
👉 В зависимости от app standby bucket в котором находится приложение
👉 Если Job была запущена пока приложение показывалось пользователю, то она сможет продолжится после скрытия приложения. система выделит дополнительную квоту на выполнение.
Из текста непонятно как изменение повлияет на остановку Job, но точно остылают к API для того чтобы понять причину остановки или почему не запускается выполнение
Изменение поведения коснётся всех приложения, независимо от targetSdk
#android16 #workmanager
🤯23👍5❤1
В Android 16 разработчики смогу получать у дисплея рекомендуемую частоту обновлению UI в зависимости от частоты обновления дисплея с помощью Display.getSuggestedFrameRate()
RecyclerView с версии 1.4 уже использует понимание о частое обновления дисплея и поддержку адаптивной частоты будут добавлять и в другие библиотеки Jetpack
#android16
Please open Telegram to view this post
VIEW IN TELEGRAM
👍23
Вышел Dagger 2.54
Релиз который мы заслужили - переделки и багфиксы. Зачем вообще обновлять Dagger я не понимаю 😞
#dagger #di
Релиз который мы заслужили - переделки и багфиксы. Зачем вообще обновлять Dagger я не понимаю 😞
#dagger #di
🤯15👍9
Forwarded from Kotlin Multiplatform Broadcast
🎉 Вышла KotlinX Coroutines 1.10.1
Что нового:
👉 Kotlin 2.1.0
👉 Новые терминальные операторы Flow.any, Flow.all и Flow.none для проверок, аналогичных коллекциям. Будьте внимательные, что для бесконечных Flow вы можете не получить результата
👉 Сделали реорганизацию кода в
🛠 Исправление багов
Что нового:
👉 Kotlin 2.1.0
👉 Новые терминальные операторы Flow.any, Flow.all и Flow.none для проверок, аналогичных коллекциям. Будьте внимательные, что для бесконечных Flow вы можете не получить результата
👉 Сделали реорганизацию кода в
kotlinx-coroutines-debug and kotlinx-coroutines-core🛠 Исправление багов
👍32
🤯 Как имя переменной может повлиять на скорость выполнения коды
Вы будете удивлены, но от имени переменной код может начать работать быстрее в Android 🤯 Связано это с тем, как виртуальная машина ART компилирует код и помещает его в кэш процессора. Помещение происходит в алфавитном порядке, значит в кэш будет попадать переменные с первыми буквами алфавита, а остальное будет вычитываться из оперативной памяти без ускорение со стороны CPU.
Теперь задумаетесь как называть переменные еще и для ускорения кода 😁
#android #оптимизиация #ART
Вы будете удивлены, но от имени переменной код может начать работать быстрее в Android 🤯 Связано это с тем, как виртуальная машина ART компилирует код и помещает его в кэш процессора. Помещение происходит в алфавитном порядке, значит в кэш будет попадать переменные с первыми буквами алфавита, а остальное будет вычитываться из оперативной памяти без ускорение со стороны CPU.
Теперь задумаетесь как называть переменные еще и для ускорения кода 😁
#android #оптимизиация #ART
🤯63👍8
🤯 Расширенное превью View через Compose Preview
Разработчик стал использовать обертку из Composable функций для XML Layout, чтобы обернуть View и получить возможности превью Compose в Android Studio: превью с большим количеством функций, превью UI на устройстве и интерактивный режим
Чего только не сделают, чтобы не двигаться в новый UI фреймворк 😁
#android #androidstudio
Разработчик стал использовать обертку из Composable функций для XML Layout, чтобы обернуть View и получить возможности превью Compose в Android Studio: превью с большим количеством функций, превью UI на устройстве и интерактивный режим
Чего только не сделают, чтобы не двигаться в новый UI фреймворк 😁
#android #androidstudio
🤯30👍16 6
This media is not supported in your browser
VIEW IN TELEGRAM
App Sizer - Gradle и CLI инструмент для анализа размера Android приложений. Исходный код открыт, а сам инструмент бесплатный
#инструменты
#инструменты
👍29 2
This media is not supported in your browser
VIEW IN TELEGRAM
Instagram на Android добавила съёмку в Ночном Режиме
Функцию могут оценить пользователи Google Pixel 6 и выше, Galaxy S24 Ultra, Flip и Fold 6 поколения. Обещают поддержки большего количества устройств. Реализовали её на основе Jetpack CameraX, но также можно сделать и через Camera 2 API из Android SDK.
#android #camerax
Функцию могут оценить пользователи Google Pixel 6 и выше, Galaxy S24 Ultra, Flip и Fold 6 поколения. Обещают поддержки большего количества устройств. Реализовали её на основе Jetpack CameraX, но также можно сделать и через Camera 2 API из Android SDK.
#android #camerax
👍17
Media is too big
VIEW IN TELEGRAM
Аудит Google нагрянул внезапно (как снег в Москве), и команде Яндекс 360 пришлось очень оперативно доказать, что Почта безопасна (и срочно исправить, если вдруг не совсем).
Проверку прошли успешно, и деляться своим опытом. В процессе поняли, как делать не надо, и как можно улучшить процесс разработки (например, на что обращать внимание на ревью).
Презентация – https://disk.yandex.ru/i/vv1l7tEIeq6TIA
#android #яндекс #codefest #безопасность
Please open Telegram to view this post
VIEW IN TELEGRAM
👍22❤2
🚀 Ускорение загрузки Koin при запуске Android приложения (EN,8м)
В Koin 4 добавили интеграцию с Jetpack Startup для запуска инициализации Koin
и доступна инициализация фича модулей
Также показывается отложення загрузка модулей с помощью корутин
Подробнее про ленивые модули и фоновую загрузку в документации
#android #koin #di #jetpack #производительность #coroutines #AndroidBroadcast #БазаЗнаний
В Koin 4 добавили интеграцию с Jetpack Startup для запуска инициализации Koin
class MainApplication : Application(), KoinStartup {
override fun onKoinStartup(): KoinAppDeclaration = {
androidContext(this@MainApplication)
allowOverride(false)
modules(AppModule().module)
defaultModule()
}
}и доступна инициализация фича модулей
// Initializer из Jetpack Startup
class FirstModuleInitializer : Initializer<Unit> {
override fun create(context: Context) {
loadKoinModules(firstModule)
}
override fun dependencies() =
mutableListOf(KoinInitializer::class.java)
}
Также показывается отложення загрузка модулей с помощью корутин
val m1 = lazyModule {
singleOf(::ClassA) { bind<IClassA>() }
}
startKoin {
// загрузка модулей в фоне с помощью Kotlin Coroutines
lazyModules(m1)
}
val koin = KoinPlatform.getKoin()
// Ожидания выполнения задач загрузки модулей
koin.waitAllStartJobs()
// или ставим в очередь лямбду на выполнение после
koin.runOnKoinStarted { koin ->
// Код выполнится после загрузки lazy modules
}Подробнее про ленивые модули и фоновую загрузку в документации
#android #koin #di #jetpack #производительность #coroutines #AndroidBroadcast #БазаЗнаний
1👍27🔥8 3❤2
🚀 Duolingo ускорили время сборки на CI c 50 до 16 минут
В первую очередь ребята пошли самым простым путем - прокачали железо на CI, что дало основной прирост.
Затем произвели оптимизацию запуска задач на CI, что эффективнее использовать общие ресурсы.
Максимально настроили кэш, чтобы не выполнять одну и ту же работу между сборками.
В коде отказались от старых технологий и лишнего груза на сборку. Например, KAPT поменяли на KSP
Читая статью, сложилось впечатление что ребята сделали самую базу и долго терпели как у них было всё плохо.
#android #ios #ci #производительность
В первую очередь ребята пошли самым простым путем - прокачали железо на CI, что дало основной прирост.
Затем произвели оптимизацию запуска задач на CI, что эффективнее использовать общие ресурсы.
Максимально настроили кэш, чтобы не выполнять одну и ту же работу между сборками.
В коде отказались от старых технологий и лишнего груза на сборку. Например, KAPT поменяли на KSP
Читая статью, сложилось впечатление что ребята сделали самую базу и долго терпели как у них было всё плохо.
#android #ios #ci #производительность
👍39🔥9🤯3 2
VK представила OpenVK, где будут собраны все проекты компании с открытым исходным кодом. Сам же код располагается на GitHub и других публичных площадках.
Уже опубликованы:
👉 ByteWeaver - инструмент для патчинга JVM байт-кода Android-приложений во время сборки. Используется в Tracer
👉 DeviceHub - система удаленного управления Android-устройствами, которые используются для тестирования и разработки приложений
👉 VKUI — дизайн-система на React для создания интерфейсов
Среди ML-разработок — модель Sentence Encoders которая строит специальные векторные представления по тексту и служит базой для многих внутренних задач. Сейчас она находится в топе ru-MTEB, а число скачиваний доходит до 100 000 в месяц.
Источник тут
#opensource #vk
Уже опубликованы:
👉 ByteWeaver - инструмент для патчинга JVM байт-кода Android-приложений во время сборки. Используется в Tracer
👉 DeviceHub - система удаленного управления Android-устройствами, которые используются для тестирования и разработки приложений
👉 VKUI — дизайн-система на React для создания интерфейсов
Среди ML-разработок — модель Sentence Encoders которая строит специальные векторные представления по тексту и служит базой для многих внутренних задач. Сейчас она находится в топе ru-MTEB, а число скачиваний доходит до 100 000 в месяц.
Источник тут
#opensource #vk
👍26🤯8🔥4
Как правильно работать с 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