TGTGInsighttelegram intelligenceLIVE / telegram public index
Retour aux chaînes
Android Broadcast avatar

TGINSIGHT CHAT

Android Broadcast

@android_broadcast

Technologies

Подборка новостей и статей для Android разработчиков. Реклама и связь с автором @ab_manager РКН https://abdev.by/rkn_tg_ab#MQRZR

Abonnés1.4万Abonnés actuels de la chaîne
Posts indexés1,000Nombre de posts indexés
Portée récente80,430Somme des vues récentes
Posts récents

Posts récents

Page 79 sur 84 · 1,000 posts

🤯Не нужно делать инжект всех зависимостей в конструктор Встретил код в проекте: class MyViewModel( ... private val sendDataUseCase: SendDataUseCase, ... ): ViewModel() { // Вызывается, когда пользователь в UI нажмёт на "Send" fun onSendClicked(...) { viewModelScope.launch { sendDataUseCase.invoke(...) // либо sendDataUseCase(...) } } } sendDataUseCase не нужен сразу при создании объекта, а нужен только если пользователь нажмёт на кнопку "Send" в UI, что может и не произойти. Так как эта зависимость нужна в конструкторе, то при получении в DI будет сразу происходить создание этой зависимости, что приводит к ненужной нагрузке. Я рекомендую делать отложенное получение зависимостей с помощью механизма Provider или Lazy. Первый будет ходить за зависимостью в граф каждый раз, а второй - при первом обращении и сохранит её. // При использовании Dagger или Hilt class MyViewModel( ... private val sendDataUseCase: javax.inject.Provider<SendDataUseCase>, // или dagger.Lazy ... ): ViewModel() { fun onSendClicked(...) { viewModelScope.launch { sendDataUseCase.get() .invoke(...) } } } Если вы используете Koin на момент написания поста (актуальная версия 4.0), делать отложенный инжект в конструктор возможности нет: // При использовании Koin class MyViewModel(): ViewModel() { // отложенное получение зависимости в Koin private val sendDataUseCase: SendDataUseCase by inject() fun onSendClicked(...) { viewModelScope.launch { // аналог Provider - получение зависимости каждый раз из графа val sendDataUseCase: SendDataUseCase = getKoin().get() sendDataUseCase.invoke(...) } } } Результат оптимизации ✅ более быстрый старт экранов (зависит от сложности графов) ✅ уменьшение расхода памяти ❌ KOIN потеря явной зависимости в конструкторе. Мне бы очень хотелось увидеть аналог Provider и Lazy в Koin через конструктор, но пока приходится делать свои обертки 😔 #dagger#di#лучшиепрактики

6,420 views

Коротко описал ключевые изменения в ViewBindingPropertyDelegate 2.0 через статью (EN,3м) и вот альтернативная ссылка #android#viewbinding

5,820 views

Вышел Coil 3.1.0 - популярный загрузчик картинок с поддержкой KMP 👉Улучшили производительность AsyncImage: скорость работы стала лучше на 25-40%, а потребление памяти - на 35-48% 👉 FakeImage теперь deprecated 👉 Появился ColorImage - полезен для возвращения фейковых значений в тестах и для Compose превью 👉 coil-compose-core больше не зависит от Dispatchers.Main.immedate, что позволило исправить баги в работе Paparazzi и Roborazzi 🛠 Множество других исправлений и улучшений API #kmp#android#compose

5,390 views

Google напомнила про возможность настройки Firebase AppCheck на основе Play Integrity API в вашем приложении, чтобы убедиться, что доступ к бэку происходит из авторизованного приложения и на Android устройстве, которому можно доверять #android#безопасность

6,110 views

Publié 4 févr.

7,450 views

📹Демонстрация как Gemini 1.5 в Android Studio может сгенерировать код Запрос, который ввел разработчик Act as an Android app developer, analyze the project provided, generate an updated Profile.kt file for this project so that the Compose Preview is as close to the provided image as possible. Make sure to Include imports. Use Jetpack Compose and Kotlin. Use as many components as possible from the project. Don't omit code, provide the full solution. Do not include any previous responses as context. @project #android#compose#gemini#androidstudio

6,720 views

Существенный минус Code Connect - фича доступна только на планах Organization и Enterprise, которые стоят 45$ и 75$ в месяц за Full Seat или 25$ и 35$ в месяц за место с Dev Mode 🤯 Обязательно надо купить не меньше чем 3 Full Seat, оплата сразу за год и выходит минимум 1620$ в год 🤯 за Organization план По итогу Code Connect будет доступен только большим компаниям, которые готовы столько потратить на Figma. А я думал попробовать её при разработке своего личного проекта - FrameIO 😔 Простым смертным, да и большинству разработчиков в компаниях придется всё дальше писать ручками. Я думаю, что Google всетаки делает ставку именно на AI генерацию на основе макетов. Это уже показывали на Google IO при помощи Gemini #figma

6,680 views

Hashtags

📹Обзор Beta версии Figma Code Connect Сам не знал что это за зверь такой и буду изучать UPD. Понял почему не знал - у меня нет денег на такую лицензию 😂 #figma

5,720 views

Hashtags

Google объвила об отказе разработки Relay - инструмента для генерации Compose кода на основе макетов в Figma. Срок закрытия поддержки - 30 апреля 2025. Причина закрытия проекта - появление Figma Code Connect с поддержкой Compose #compose#figma

7,890 views

Получали недавно такое письмо от Google Play? Так вот вам пора переходить на Photo Picker или направить обоснование доступа к картинкам и видео напрямую. Подробности решения в статье (EN,5м) 🔗Ссылка без VPN #android#googleplay#permission

6,430 views

Publié 2 févr.

6,900 views

Все мы уже привыкли выкладывать сборки в Google Play через AAB, которые передаст на устройство только необходимое для устройства нативные библиотеки. Некоторым приходится раздавать сборку в APK формате. Банальный кейс - отдавать сборку на проверку QA. Универсальное APK - содержит ресурсы и библиотеки под все возможные устройства, даже те которые не нужны на устройстве пользователя. Обычно нативные библиотеки делают наибольший вклад в конечный размер приложения на устройстве пользователя. Отказ от ненужных позволит снизить размер и скорость доставки до устройства пользователя. Android Gradle плагин позволяет указать какие ABI нужно добавлять в сборку. Сложность в том, что для финальной сборки обычно надо добавить ABI arm64-v8a и armeabi-v7a, а вот для Intel эмуляторов нужны x86 и x86-64. Чтобы делать это эффективно, я делал механизм передачи значений ABI через переменные при сборке. Это позволяет задавать локально и на CI разные значения, а локальные задавать через файл local.properties или переменную окружения // Код в Gradle KTS скрипте fun resolveAbiFilters(): List<String> { val abisString = project.findProperty("abiFilter") as String? // Параметр командной строки ?: readFromLocalProperties("abi.filter") // Значение из local.properties ?: System.getenv("ABI_FILTER") // Переменная окружения return abisString?.split(",") ?: emptyList() } fun readFromLocalProperties(key: String): String? { val localPropertiesFile = rootProject.file("local.properties") if (!localPropertiesFile.exists()) return null val localProperties = Properties().apply { localPropertiesFile.inputStream().use(::load) } return localProperties.getProperty(key) } // В Android application модуле указываем android { defaultConfig { ndk { abiFilters = resolveAbiFilters() } } } Пример задания через параметр ./gradlew assembleRelease -PabiFilter=arm64-v8a,armeabi-v7a Если вы запускаете приложения из Android Studio на устройстве/эмуляторе, то IDE понимает какую ABI из поддерживаемых стоит включить в APK, чтобы приложение смогло работать. Все остальные исключается. Сборка компактнее - меньше время на передачу и установку тестового билда. #android#gradle#ndk

8,900 views
12•••5•••10•••15•••20•••25•••30•••35•••40•••45•••50•••55•••60•••65•••70•••75•••7778798081•••8384