Android Broadcast
Подборка новостей и статей для Android разработчиков. Реклама и связь с автором @ab_manager РКН https://abdev.by/rkn_tg_ab #MQRZR
Показати більше📈 Аналітичний огляд Telegram-каналу Android Broadcast
Канал Android Broadcast (@android_broadcast) у мовному сегменті Російська є активним учасником. На даний момент спільнота об'єднує 14 536 підписників, посідаючи 8 638 місце в категорії Технології та додатки та 45 100 місце у регіоні Росія.
📊 Показники аудиторії та динаміка
З моменту свого створення невідомо, проект продемонстрував стрімке зростання, зібравши аудиторію у 14 536 підписників.
За останніми даними від 25 серпня, 2026, канал демонструє стабільну активність. Хоча за останні 30 днів спостерігається зміна кількості учасників на -24, а за останні 24 години на -1, загальне охоплення залишається високим.
- Статус верифікації: Не верифікований
- Рівень залученості (ER): Середній показник залученості аудиторії становить 38.77%. Протягом перших 24 годин після публікації контент зазвичай збирає 22.90% реакцій від загальної кількості підписників.
- Охоплення публікацій: В середньому кожен допис отримує 5 635 переглядів. Протягом першої доби публікація в середньому набирає 3 329 переглядів.
- Реакції та взаємодія: Аудиторія активно підтримує контент: середня кількість реакцій на один пост – 51.
- Тематичні інтереси: Контент зосереджений навколо ключових тем, таких як api, kotlin, gradle, сборка, androiddev.
📝 Опис та контентна політика
Автор описує ресурс як майданчик для висловлення суб'єктивної думки:
“Подборка новостей и статей для Android разработчиков.
Реклама и связь с автором @ab_manager
РКН https://abdev.by/rkn_tg_ab #MQRZR”
Завдяки високій частоті оновлень (останні дані отримано 26 серпня, 2026), канал підтримує актуальність та високий рівень охоплення публікацій. Аналітика показує, що аудиторія активно взаємодіє з контентом, що робить його важливою точкою впливу в категорії Технології та додатки.
GlobalScope.launch / async
👉 collect / collectLatest без repeatOnLifecycle / flowWithLifecycle
👉 runBlocking (особенно на UI)
👉 async { } без использования Deferred (не поймаете исключения)
👉 Job / SupervisorJob / CoroutineScope без .cancel() в onCleared/onDestroy
👉 захардкоженные Dispatchers.IO/Main/Default
Есть quick-fix’ы (Alt+Enter). Если код внутри ViewModel, сразу подставляет viewModelScope. В Fragment/Activity — lifecycleScope или оборачивает collect в repeatOnLifecycle(STARTED)
Пока плагина нет в Marketplace. Ставится через Gradle:
// сборка плагина и он будет в build/distributions/ ./gradlew buildPlugin // затем поставить плагин из интерфейса IDEИдея хорошая, но не понял одного - почему именно через IDE плагин? Нельзя было сделать Android Lint проверки или еще какой анализатор использовать? Тем более с ИИ сейчас это можно сделать эффективно, а вот IDE у меня уже вообще ушла из использования #Kotlin #Coroutines #AndroidStudio #Android
checkSelfPermission — это только начало
👉 Как обходиться без разрешений через системные пикеры
👉 Google Play политики, которые могут забанить твоё приложение
Разрешения — это не техническая деталь. Это контракт доверия между твоим продуктом и пользователем.
———
Ставь 🔥, если хочешь видеть больше глубоких разборов Android-архитектуры!
🪙 Полный разбор на BoostyAIAB9 получите скидку. Старт нового сезона - 31 августа.ApplicationExitInfo:
- reason == REASON_OTHER
- description содержит "MemoryLimiter:AnonSwap"
Можно ещё повесить TRIGGER_TYPE_ANOMALY в ProfilingManager и автоматически снимать heap dump в момент, когда лимит сработал.
Для локального теста поведения можно использовать adb:
adb shell am memory-limiter status
adb shell am memory-limiter manual <pid> <limit_mb>
adb shell am memory-limiter ignore <uid>|all|none
В Android Vitals и Crashlytics 20.1.0 уже есть отдельные сигналы по этим убийствам. Если у тебя в приложении есть тяжёлые экраны, кэши, игры или foreground-сервисы - следи за метриками.
🔗 Источник - блог Android Developers
#Android #AndroidDev #Android17org.gradle.configuration-cache=true
Самое показательное даже не skills. Билд-система — штука, которая вроде бы должна стоять чуть в стороне от хайпа. И вот Gradle тоже идёт в agentic. Потому что пользователи уже этого хотят, потому что открываются новые способы продвижения, потому что инвесторам это нужно показывать. Даже серьёзные инструменты сейчас вынуждены "кланяться".
🔗 Источник - блог Gradle
#Gradle #AIandroidx.xr.scenecore:scenecore:1.0.0-beta02
- androidx.xr.arcore:arcore:1.0.0-beta02
- androidx.xr.runtime:runtime:1.0.0-beta02
Compose for XR пока ещё 1.0.0-alpha17 (обещают beta скоро).
Тестировать можно на Samsung Galaxy XR или в Android XR Emulator.
🔗 Официальный анонс
#Android #AndroidXR #XR #AndroidDevmediaQuery — лямбда, которая смотрит на текущий UiMediaScope и возвращает boolean. Внутри можно проверять:
👉 windowWidth / windowHeight
👉 windowPosture (Tabletop, Book, Flat)
👉 pointerPrecision (Fine → Coarse → Blunt → None)
👉 keyboardKind (Physical / Virtual / None)
👉 hasCamera / hasMicrophone
👉 viewingDistance (Near / Medium / Far)
Включается одним флагом при запуске приложения:
ComposeUiFlags.isMediaQueryIntegrationEnabled = true
Для размеров, которые дёргаются часто, лучше использовать derivedMediaQuery (обёртка над derivedStateOf):
// Composable code
val narrowerThanMedium by derivedMediaQuery {
windowWidth < WindowSizeClass.WIDTH_DP_MEDIUM_LOWER_BOUND.dp
}
val narrowerThanExpanded by derivedMediaQuery {
windowWidth < WindowSizeClass.WIDTH_DP_EXPANDED_LOWER_BOUND.dp
}
when {
narrowerThanMedium -> SinglePaneLayout()
narrowerThanExpanded -> TwoPaneLayout()
else -> ThreePaneLayout()
}
Самый чистый кейс — foldable в tabletop:
// Composable code
if (mediaQuery { windowPosture == UiMediaScope.Posture.Tabletop }) {
TabletopLayout()
} else {
FlatLayout()
}
Это API не замена WindowSizeClass, но удобный единый вход для всего, что меняется в рантайме. Если пишете адаптив под foldable / desktop / TV — возьмите на заметку. Пока не перенесли в Compose Multiplatform.
Документация Media Query API
#Compose #JetpackCompose #Adaptive #UI #AndroidYatagan entry point в api-public. Reflection или codegen подхватываются автоматически, имплементация с генерацией кода имеет приоритет.
👉 Экспериментальный Dagger compatibility mode. Включаешь yatagan.experimental.enableDaggerCompatibility и Yatagan генерит DaggerMyComponent фасады. Старые DaggerMyComponent.create() / .builder() продолжают работать. Поддерживается ядро (components, modules, scopes, multibindings, assisted), без Hilt/Android/producers.
👉 Conditions API почистили: legacy @Condition/@AnyCondition deprecated в пользу @ConditionExpression, @Provides(Conditional(...)) → отдельный @Conditional на методе.
👉 Runtime-конфиг стал declarative (processor options + parameters.properties), убрали глобальный mutable state.
Есть подробный migration guide и даже скилл для агента:
npx skills add yandex/yatagan
Это RC. Compatibility mode экспериментальный — граф лучше провалидировать. Но для тех, кто уже страдает от Dagger на больших проектах и смотрел в сторону Yatagan, порог входа заметно снизился.
🔗 Release Notes
#Android #AndroidDev #DI #YataganWebViewCompat.navigate наконец-то нормальная замена loadUrl. Можно заменять страницу в истории, получать объект Navigation и корректно сохранять/восстанавливать заголовки. Для приложений, где WebView — не просто «открыть ссылку», а нормальный флоу, это давно было нужно.
if (WebViewFeature.isFeatureSupported(WebViewFeature.WEBVIEW_NAVIGATE_EXPERIMENTAL_V1)) {
val params = NavigationParameters.Builder()
.setShouldReplaceCurrentEntry(true) // заменяет текущую запись в истории
.addAdditionalHeader("X-Custom-Header", "value")
.build()
val navigation: Navigation
= WebViewCompat.navigate(webView, "https://example.com", params)
// navigation можно потом матчить в NavigationListener
}
👉 Контроль HTTP-кэша через Profile.getHttpCache. Можно посмотреть квоту и при необходимости подкрутить. Полезно, если много статики, или наоборот — когда кэш только место жрёт.
if (WebViewFeature.isFeatureSupported(WebViewFeature.HTTP_CACHE_MANAGER)) {
val profile = ProfileStore.getInstance().getOrCreateProfile("my_profile")
val httpCache = profile.httpCache // или profile.getHttpCache()
// Посмотреть текущую квоту
val currentQuota = httpCache.quotaBytes
val defaultQuota = httpCache.defaultQuotaBytes
val isDefault = httpCache.isUsingDefaultQuota
// Задать свою квоту (например, 50 МБ)
httpCache.setQuotaBytes(50L * 1024 * 1024)
// Или вернуть автоматическое управление
// httpCache.useDefaultQuota()
}
👉enqueuePreconnect — можно заранее поставить preconnect в очередь, не заставляя WebView стартовать прямо сейчас.
👉 Можно отключить автоматическую загрузку фавиконок (setDownloadFaviconsEnabled). Мелочь, но экономит память и трафик, особенно если иконок много.
👉 Плюс Android Lint, который теперь ругается, если кастомный WebViewClient не переопределил onRenderProcessGone. Полезно, потому рендерер падает регулярно.
🔗 Подробности релиза
#Android #AndroidDev #WebView #AndroidJetpackandroidx.fragment:fragment-*:1.9.0.
Три изменения, которые реально заметны:
👉 Fragment теперь реализует ContextAware. Можно повесить OnContextAvailableListener и выполнить код в момент, когда контекст стал доступен (аналог того, что давно есть у Activity).
👉 У composable AndroidFragment {} появился параметр maxLifecycle. Можно жёстко ограничить lifecycle вложенного фрагмента — удобно в пейджерах, табах и других сложных UI, где не хочется, чтобы offscreen-фрагмент уезжал в RESUMED.
👉 Добавили system tracing lifecycle-событий через Jetpack Tracing. В Perfetto теперь видно, что происходит с фрагментами.
Плюс куча фиксов predictive back и setMaxLifecycle + popBackStack, которые тянулись с 1.8.x.
Если живёте на Fragment + Compose interop — обновляться имеет смысл. Чистый Compose-проект может спокойно пропустить.
#Android #AndroidDev #Jetpack #FragmentTraceDriver + Tracer + TraceSink (можно подключать свои бэкенды).
👉 Настоящая поддержка корутин с отслеживанием suspend/resume и переключений потоков.
👉 Поддержка KMP (Android + JVM).
👉 Существенно ниже оверхед по сравнению со старым android.os.Trace / trace {}.
Старый API не deprecated его по-прежнему рекомендуют для редких критичных событий, которые обязаны попасть в system trace.
🔗 Полные release notes по ссылке
#AndroidDev #Perfromance #AndroidJetpackTraceDriver + Tracer + TraceSink (можно подключать свои бэкенды).
👉 Настоящая поддержка корутин с отслеживанием suspend/resume и переключений потоков.
👉 Поддержка KMP (Android + JVM).
👉 Существенно ниже оверхед по сравнению со старым android.os.Trace / trace {}.
Старый API не deprecated его по-прежнему рекомендуют для редких критичных событий, которые обязаны попасть в system trace.
🔗 Полные релиз-ноты по ссылке
#AndroidDev #Perfromance #AndroidJetpack