Android Broadcast
14.4K subscribers
3.68K photos
367 videos
11 files
6.1K links
Подборка новостей и статей для Android разработчиков.

Реклама и связь с автором @ab_manager

РКН https://abdev.by/rkn_tg_ab #MQRZR
Download Telegram
‼️ Tracer 1.0.0 релизнули

Вышла долгожданная версия Tracer 1.0.0. Тем кому это важно могут начать использовать инструмент чтобы следить за крешами, производительностью и состоянием устройства. Всё это полностью бесплатно!

Поздравляю всю команду с релизом и желаю им процветания и развития

#tracer
🔥66👍206
🤯 Обновление работы WorkManager и JobSchedule в Android 16

При запуске обычной и Expedited Job (через JobScheduler или WorkManager) её выполнение зависит от квоты приложения на выполнение работы в фоне и в Android 16 она изменяется:
👉 В зависимости от app standby bucket в котором находится приложение
👉 Если Job была запущена пока приложение показывалось пользователю, то она сможет продолжится после скрытия приложения. система выделит дополнительную квоту на выполнение.

Из текста непонятно как изменение повлияет на остановку Job, но точно остылают к API для того чтобы понять причину остановки или почему не запускается выполнение

Изменение поведения коснётся всех приложения, независимо от targetSdk

#android16 #workmanager
🤯23👍51
🤖 Расширение работы с адаптивной частой обновления дисплея в Android 16

В Android 16 разработчики смогу получать у дисплея рекомендуемую частоту обновлению UI в зависимости от частоты обновления дисплея с помощью Display.getSuggestedFrameRate()

RecyclerView с версии 1.4 уже использует понимание о частое обновления дисплея и поддержку адаптивной частоты будут добавлять и в другие библиотеки Jetpack

#android16
Please open Telegram to view this post
VIEW IN TELEGRAM
👍23
Разбор (15м) классов, который использует Dagger 2 для построения графа зависимостей, в процессе генерации кода. Рекомендую всем чтобы понять устройство Dagger и DI подхода в целом.

#android #dagger
👍356🤯2💯1
Вышел Dagger 2.54

Релиз который мы заслужили - переделки и багфиксы. Зачем вообще обновлять Dagger я не понимаю 😞

#dagger #di
🤯15👍9
🎉 Вышла KotlinX Coroutines 1.10.1

Что нового:
👉 Kotlin 2.1.0
👉 Новые терминальные операторы Flow.any, Flow.all и Flow.none для проверок, аналогичных коллекциям. Будьте внимательные, что для бесконечных Flow вы можете не получить результата
👉 Сделали реорганизацию кода в kotlinx-coroutines-debug and kotlinx-coroutines-core
🛠 Исправление багов
👍32
🤯 Как имя переменной может повлиять на скорость выполнения коды

Вы будете удивлены, но от имени переменной код может начать работать быстрее в Android 🤯 Связано это с тем, как виртуальная машина ART компилирует код и помещает его в кэш процессора. Помещение происходит в алфавитном порядке, значит в кэш будет попадать переменные с первыми буквами алфавита, а остальное будет вычитываться из оперативной памяти без ускорение со стороны CPU.

Теперь задумаетесь как называть переменные еще и для ускорения кода 😁

#android #оптимизиация #ART
🤯63👍8
🤯 Расширенное превью View через Compose Preview

Разработчик стал использовать обертку из Composable функций для XML Layout, чтобы обернуть View и получить возможности превью Compose в Android Studio: превью с большим количеством функций, превью UI на устройстве и интерактивный режим

Чего только не сделают, чтобы не двигаться в новый UI фреймворк 😁

#android #androidstudio
🤯30👍166
This media is not supported in your browser
VIEW IN TELEGRAM
App Sizer - Gradle и CLI инструмент для анализа размера Android приложений. Исходный код открыт, а сам инструмент бесплатный

#инструменты
👍292
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
👍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
👍222
🚀 Ускорение загрузки Koin при запуске Android приложения (EN,8м)

В 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🔥832
🚀 Duolingo ускорили время сборки на CI c 50 до 16 минут

В первую очередь ребята пошли самым простым путем - прокачали железо на CI, что дало основной прирост.

Затем произвели оптимизацию запуска задач на CI, что эффективнее использовать общие ресурсы.

Максимально настроили кэш, чтобы не выполнять одну и ту же работу между сборками.

В коде отказались от старых технологий и лишнего груза на сборку. Например, KAPT поменяли на KSP

Читая статью, сложилось впечатление что ребята сделали самую базу и долго терпели как у них было всё плохо.

#android #ios #ci #производительность
👍39🔥9🤯32
VK представила OpenVK, где будут собраны все проекты компании с открытым исходным кодом. Сам же код располагается на GitHub и других публичных площадках.

Уже опубликованы:
👉 ByteWeaver - инструмент для патчинга JVM байт-кода Android-приложений во время сборки. Используется в Tracer
👉 DeviceHub - система удаленного управления Android-устройствами, которые используются для тестирования и разработки приложений
👉 VKUI — дизайн-система на React для создания интерфейсов

Среди ML-разработок — модель Sentence Encoders которая строит специальные векторные представления по тексту и служит базой для многих внутренних задач. Сейчас она находится в топе ru-MTEB, а число скачиваний доходит до 100 000 в месяц.

Источник тут

#opensource #vk
👍26🤯8🔥4
Как правильно работать с MutableStateFlow внутри ViewModel и из вне

Если вы пишите под 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 #БазаЗнаний
👍7113🤯51
📹 Что не так с мобильными сервисами в Android и iOS. Кирилл Розов. Mobius Осень 2024

Стала доступна запись моего доклада с Mobius где я рассказал про проблему монополии мобильных сервисов и предложил своё решение для светлого будущего новых мобильных ОС

#mobius
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥21👍9
Forwarded from AvitoTech
«Как поздравить наших подписчиков с Новым годом?»

Этим вопросом мы задались еще в ноябре. «Крутили» с командой разные идеи, но одна вдохновила больше всех — сделать адвент-календарь для тех, кто создает продукты и сервисы. И вот, мы выкатываем его в прод!

В календаре собрали некоторые принципы из нашего Playbook, в котором прописаны правила инженерной команды Авито. Их легко адаптировать под свои рабочие задачи, а некоторые можно даже переложить на ежедневную рутину.

Тапайте на ячейки, забирайте нужное, улучшайте разработку и инженерную культуру вместе с нами.

Поздравляем с наступающим Новым годом
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
12👍5