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écente83,459Somme des vues récentes
Posts récents

Posts récents

Tag : #android · 490 posts

当前筛选 #android清除筛选

🤖Как обработать слишком быстрый ввод пользователя с помощью Coroutines Flow Если внимательно посмотреть на поведение людей в поисковых полях, становится понятно: пальцы работают быстрее, чем приложение успевает реагировать. Пользователь печатает «a», тут же «an», следом «and» — а приложение в панике пытается перестроить результаты после каждого шага. Поток начинает «стрелять» событиями, система перегружается, а интерфейс выглядит так, будто его кто-то перематывает на ускоренной перемотке. Главная проблема здесь не скорость человека — а то, что приложение воспринимает каждую мелочь как повод что-то пересчитать. Чтобы интерфейс работал предсказуемо, нужно научить поток реагировать не на каждое изменение, а на осмысленное завершение ввода. ⏳Зачем нужен debounce() Оператор debounce() работает как фильтр слишком быстрых изменений: - быстрые изменения подряд — игнорируются - устойчивое значение после паузы — двигаются по потоку дальше Поток перестаёт реагировать на каждую букву и начинает слушать устойчивые состояния строки. val results = queryFlow .debounce(300) // значение задержки можно менять .distinctUntilChanged() .map { term -> searchData(term) } .stateIn(viewModelScope, SharingStarted.WhileSubscribed(5000), emptyList()) ------------ Помимо полезных символов, пользователь может случайно добавить пробел в конце или другой невидный символ. Фактически это тот же запрос — но без обработки поиск запустится повторно. В таких случаях можно определиться как оператор distinctUntilChanged() будет сранивать значения: queryFlow .debounce(300) .distinctUntilChanged { old, new -> old.trim() == new.trim() } Теперь оба состояния считаются одинаковыми, и поиск не перезапускается зря. #kotlin#coroutines#flow#android

7,330 views

🤖Как в приложение Додо пиццы добавляли Live Update из Android 16: где макеты врут, a SDK ставит границы Я давно ждал, когда в Android появится аналог крутых Live Activities из iOS. И когда Google наконец-то представил Live Updates в Android 16, сразу же ждал когда она появится в приложениях доставки/такси, используемыми мною. Неудивительно но ДоДо Пицца оперативно это сделали. Оказалось, что за красивыми картинками из презентации скрывается целая история с ограничениями, которые не описаны в документации. Ребят из ДоДо прошли через боль дизайнеров, перерисовывавших макеты, и неожиданные сюрпризы от SDK и рассказывают про свой опыт. 🔑 Ключевые открытия и борьба с реальностью: 🤯 Макеты врут! Иконка (например, машинка) не может красиво «обрезать» сегмент прогресс-бара, как в дизайне. Она просто ложится сверху, и между ними всегда будет зазор. 🖌Цвета не сходятся. У прогресс-бара есть скрытый оверлей, поэтому подобрать идеально одинаковый цвет для иконки и бара — невозможно. 📱Эмулятор — не помощник. Ни чипсу в статус-баре, ни работу на Always-On-Display на эмуляторе не проверить. Только живой девайс! 🍎iOS vs Android: В iOS Live Activities — это мини-виджет с огромной свободой для брендинга. В Android — это жёсткий системный шаблон. Минус для дизайнеров, но плюс для единообразия опыта пользователя. ✅ Что в итоге? Несмотря на все ограничения, фича того стоит! Пользователи получают супер-наглядный и всегда видимый статус заказа, а мы — новый стандартизированный инструмент от Google. А вы уже видели Live Updates в действии? Что думаете о таком подходе Google? 👇 #Android#Android16#AlwaysOn

7,270 views

🤖 Отлаживайте фоновые задачи в Android Studio как профи: Background Task Inspector для WokrManager Работаете с WorkManager? Тогда вам точно пригодится встроенный в Android Studio инструмент — Background Task Inspector. Это ваш главный помощник для визуального мониторинга и отладки фоновых задач. Что вы видите в инспекторе: - Все WorkManager задачи в одном месте - Текущие статусы: Running, Enqueued, Failed, Succeeded - Детальную информацию о каждом воркере Особенно мощно инструмент работает с цепочками задач: // Например, у вас есть такая цепочка: val workA = OneTimeWorkRequestBuilder<CleanupWorker>().build() val workB = OneTimeWorkRequestBuilder<WaterColorFilterWorker>().build() val workC = OneTimeWorkRequestBuilder<BlurEffectFilterColor>().build() workManager .beginWith(workA) .then(workB) .then(workC) .enqueue() Визуализация графа выполнения покажет: - Какая задача завершилась успешно (Succeeded) - Какая упала (Failed) и почему - Как это повлияло на последующие задачи Типичный сценарий отладки: Видите статус «Enqueued»? Значит задача в очереди, но не запускается. Возможные причины: - Ограничения не выполняются (нет сети, не заряжается устройство) - Предыдущая задача в цепочке не завершилась - Достигнут лимит параллельных задач Преимущества использования: - Экономия времени на логирование и отладку - Наглядное представление сложных цепочек задач - Быстрая диагностика проблем с выполнением фоновых операций Инструмент уже ждет вас в Android Studio → View → Tool Windows → App Inspection → Background Task Inspector. #AndroidStudio#Android#AndroidDev

5,810 views

Вот бы классно чтобы все как Uber перешли на Credential Manager API и перенос аккаунтов стал проще для пользователей, а бизнесу дешевле Подробности в статье от разработчика #android

5,850 views

Hashtags

🚀Input MotionPrediction 1.0.0 — снижаем задержки ввода с предсказанием жестов Google выпустила первую стабильную версию Input MotionPrediction — библиотеку для уменьшения задержек при вводе за счет предсказания будущих MotionEvents. Что это решает? 👉 Уменьшает perceived latency (воспринимаемую задержку) при взаимодействии с UI 👉 Предсказывает будущие координаты касания для более плавного отклика 👉 Особенно полезно для рисования, игр и жестовой навигации // Создаем предсказатель val predictor = MotionEventPredictor() // Записываем полученные события predictor.record(motionEvent) // Получаем предсказанные события на N миллисекунд вперед val predictedEvents = predictor.predict(milliseconds) Ключевые особенности: 👉 Автоматически использует системные API предсказания если доступны 👉 Встроенный алгоритм предсказания 👉 Поддерживает ориентацию и наклон стилуса 👉 Оптимизирован по памяти и производительности ‼️ Кому будет полезна: - Приложения для рисования и скетчей - Игры с тач-управлением - Сложные жестовые интерфейсы - Любой UI, где важна мгновенная реакция на касания #Jetpack#Android#UI#Производительность

7,970 views

🤯Android QuickShare теперь может работать с Apple AirDrop Google самостоятельно сделали работу с AirDrop на всю линейку Pixel 10. Ждем когда раскатят дальше, либо Apple выкатит обновление и закроет возможность 😂 #android#pixel

7,280 views

🚀Вышла стабильная версия Jetpack DataStore 1.2 Google выпустила долгожданный стабильный релиз DataStore 1.2.0. Эта версия приносит несколько важных улучшений, которые делают библиотеку ещё более мощной и удобной, особенно для проектов, не полностью перешедших на Kotlin Coroutines. Ключевые нововведения: ✅Поддержка Guava Появился новый модуль datastore-guava, который предоставляет API на основе ListenableFuture для разработчиков, использующих Guava. Теперь подключать DataStore в проекты на Java стало намного проще (а нужно было???) // Пример использования GuavaDataStore val guavaDataStore: DataStore<Preferences> = GuavaDataStore.from( produceFile = { context.preferencesDataStoreFile("settings.pb") }, serializer = PreferencesSerializer, executor = Dispatchers.IO.asExecutor() // Используем Executor ) ListenableFuture<Preferences> future = guavaDataStore.getData(); ✅ Мультипроцессность для GuavaDataStore Функциональность многопроцессного доступа, ранее доступная для Kotlin-версии, теперь добавлена и в GuavaDataStore. ✅Поддержка Android Direct Boot - работа приложений до разблокировки устройства DataStore теперь можно безопасно использовать в режиме Direct Boot. Для этого данные нужно разместить в защищённом хранилище устройства (Device Protected Storage). val directBootDataStore = DataStoreFactory.createInDeviceProtectedStorage( serializer = PreferencesSerializer ) { context.preferencesDataStoreFile("direct_boot_settings.pb") } ✅ Исправления важных багов 👉 Устранен UnsatisifedLinkError при использовании R8 без стандартного ProGuard-файла. 👉 Исправлена проблема, из-за которой операции GuavaDataStore могли запускаться на главном потоке вместо указанного IO-диспетчера. 👉 Решена проблема с FileNotFoundException в OkioStorage при одновременном обращении к файлу (добавлена вторая попытка чтения). Прочие улучшения 👉 Добавлен PreferencesFileSerializer — готовый сериализатор для работы с FileStorage. #Android#Jetpack#DataStore#Kotlin#Java#Guava

5,940 views

Пример использования Jetpack Navigation 3 data object ProductList data class ProductDetail(val id: String) @Composable fun MyApp() { // Create a back stack, specifying the key the app should start with val backStack = remember { mutableStateListOf<Any>(ProductList) } // Supply your back stack to a NavDisplay so it can reflect changes in the UI // ...more on this below... // Push a key onto the back stack (navigate forward), the navigation library will reflect the change in state backStack.add(ProductDetail(id = "ABC")) // Pop a key off the back stack (navigate back), the navigation library will reflect the change in state backStack.removeLastOrNull() } // [END android_compose_navigation3_basic_1] @Composable fun EntryProvider() { val backStack = remember { mutableStateListOf<Any>(ProductList) } NavDisplay( backStack = backStack, // [START android_compose_navigation3_basic_2] entryProvider = { key -> when (key) { is ProductList -> NavEntry(key) { Text("Product List") } is ProductDetail -> NavEntry( key, metadata = mapOf("extraDataKey" to "extraDataValue") ) { Text("Product ${key.id} ") } else -> { NavEntry(Unit) { Text(text = "Invalid Key: $it") } } } } // [END android_compose_navigation3_basic_2] ) } #android#compose#nav3#jetpack

5,960 views

🚀Вышла стабильная версия Jetpack Navigation 3 - бибилотека для UI навигации, заооченная под Compose Стал доступен первый стабильный релиз навигации, разработанной специально для Compose. Библиотека предоставляет больше гибкости и контроля разработчикам, позволяя реализовать различные подходы. Google выложила свои примеры реализации популярных задач в репозитории на 🐱GitHub Nav3 имеет поддержку Compose Multiplatform, а также JetBrains выпустила версию артефактов 👉Документация по библиотеке Всем кто использует Jetpack Navigation 2 с Compose нааооятельно рекомендуется миграция. 🔨Руководство по миграции ⭐️ Также Google сделала файл с контекстом для AI агента при миграции Про возможности бибилотеки я рассказал в 📹отдельном видео #android#compose#kmp#cmp#jetpack#ui#nav3

7,620 views

🏝Stacktrace-decoroutinator - библиотека для восстановления стектрейса ошибок, связанных с Kotlin Coroutines. Работает с Android 14+ и Java 8 и выше Для работы в Android надо подключить Gradle плагин plugins { id("dev.reformator.stacktracedecoroutinator") version "2.5.8" } #android#kotlin#coroutines

5,980 views

🛒Google Play ужесточает требования к энергопотреблению С 1 марта 2026 года расход батареи в фоне станет одним из факторов ранжирования приложений в Google Play. Если приложение заметно потребляет заряд и не получает исправлений, пользователи увидят специальную предупреждающую плашку. При отсутствии улучшений Google Play сможет исключить такое приложение из поиска — доступ останется только по прямой ссылке. Для разработчиков в Google Play Console уже доступен новый инструмент анализа Wake Lock, который помогает выявлять проблемные участки и повышать энергоэффективность приложения. Рекомендуется заранее проверить поведение приложения в фоне и устранить лишние пробуждения. #Android#GooglePlay#Оптимизация

8,189 views

📹Самый свежий рассказ про работу с Android Developer Verification Стартанул ранний доступ к консолей верификации и выпустили свежий гайд по работе. ❗️Сентябрь 2026 - это дата включения обязательной верификации ‼️Самое важное - Google отказался от обязательной верификации для всех, но при попытке установки неверифицированных APK будет показан предупреждающий диалог. Нечто подобное есть в macOS. Классно, что Google услышала обратную связь и сделал доработку, которая оставляет свободу установки, повысив безопасность. #android#безопасность

8,260 views
12•••7891011•••20•••30•••4041